{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# 融合检索：结合向量与关键词搜索\n",
    "\n",
    "实现一个融合检索系统，将语义向量搜索与基于关键词的BM25检索优势相结合。这种方法通过同时捕获概念相似性和精确关键词匹配，提升了检索质量。\n",
    "\n",
    "-----\n",
    "为什么融合检索很重要?\n",
    "\n",
    "传统的RAG系统通常仅依赖向量搜索，但这存在局限性：\n",
    "\n",
    "- 向量搜索擅长捕捉语义相似性，但可能遗漏精确关键词匹配\n",
    "- 关键词搜索适合特定术语检索，但缺乏语义理解能力\n",
    "- 不同类型的查询在不同检索方法中表现差异显著\n",
    "\n",
    "-----\n",
    "融合检索通过以下方式实现优势互补：\n",
    "\n",
    "- 并行执行基于向量和基于关键词的检索\n",
    "- 对两种方法的得分进行标准化处理\n",
    "- 通过加权公式组合两者结果\n",
    "- 基于综合得分对文档进行重新排序\n",
    "\n",
    "-----\n",
    "实现步骤：\n",
    "- 从 PDF 文件中提取文本\n",
    "- 使用 jieba 分词器对文本进行分词，并创建向量存储\n",
    "- 使用 BM25 算法对查询进行关键词匹配\n",
    "- 使用向量搜索对查询进行语义匹配\n",
    "- 将两种方法的结果进行加权组合，并重新排序\n",
    "- 返回最终的搜索结果\n"
   ],
   "id": "7992d39ae93d6d6e"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:15.870746Z",
     "start_time": "2025-04-29T01:46:06.371884Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import fitz\n",
    "import os\n",
    "import re\n",
    "import json\n",
    "import numpy as np\n",
    "from tqdm import tqdm\n",
    "from openai import OpenAI\n",
    "from dotenv import load_dotenv\n",
    "from datetime import datetime\n",
    "from rank_bm25 import BM25Okapi\n",
    "from sklearn.metrics.pairwise import cosine_similarity\n",
    "import jieba\n",
    "\n",
    "\n",
    "load_dotenv()"
   ],
   "id": "f0622490ae084a2d",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.291778Z",
     "start_time": "2025-04-29T01:46:15.948542Z"
    }
   },
   "cell_type": "code",
   "source": [
    "client = OpenAI(\n",
    "    base_url=os.getenv(\"LLM_BASE_URL\"),\n",
    "    api_key=os.getenv(\"LLM_API_KEY\")\n",
    ")\n",
    "llm_model = os.getenv(\"LLM_MODEL_ID\")\n",
    "embedding_model = os.getenv(\"EMBEDDING_MODEL_ID\")\n",
    "\n",
    "pdf_path = \"../../data/AI_Information.en.zh-CN.pdf\""
   ],
   "id": "9ab5e26818e0c378",
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 文档处理函数",
   "id": "bf234b0ce886c18e"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.467418Z",
     "start_time": "2025-04-29T01:46:16.463635Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def extract_text_from_pdf(pdf_path):\n",
    "    \"\"\"\n",
    "    从 PDF 文件中提取文本，并打印前 `num_chars` 个字符。\n",
    "\n",
    "    Args:\n",
    "    pdf_path (str): Path to the PDF file.\n",
    "\n",
    "    Returns:\n",
    "    str: Extracted text from the PDF.\n",
    "    \"\"\"\n",
    "    # 打开 PDF 文件\n",
    "    mypdf = fitz.open(pdf_path)\n",
    "    all_text = \"\"  # 初始化一个空字符串以存储提取的文本\n",
    "\n",
    "    # Iterate through each page in the PDF\n",
    "    for page_num in range(mypdf.page_count):\n",
    "        page = mypdf[page_num]\n",
    "        text = page.get_text(\"text\")  # 从页面中提取文本\n",
    "        all_text += text  # 将提取的文本追加到 all_text 字符串中\n",
    "\n",
    "    return all_text  # 返回提取的文本"
   ],
   "id": "e17a33c2640a6cd3",
   "outputs": [],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.482403Z",
     "start_time": "2025-04-29T01:46:16.477862Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def chunk_text(text, chunk_size=800, overlap=100):\n",
    "    \"\"\"\n",
    "    将文本分割为重叠的块。\n",
    "\n",
    "    Args:\n",
    "        text (str): 要分割的输入文本\n",
    "        chunk_size (int): 每个块的字符数\n",
    "        overlap (int): 块之间的字符重叠数\n",
    "\n",
    "    Returns:\n",
    "        List[Dict]: 包含文本和元数据的块字典列表\n",
    "    \"\"\"\n",
    "    chunks = []  # 初始化一个空列表来存储块\n",
    "\n",
    "    # 使用指定的块大小和重叠迭代文本\n",
    "    for i in range(0, len(text), chunk_size - overlap):\n",
    "        chunk = text[i:i + chunk_size]  # 提取指定大小的块\n",
    "        if chunk:  # 确保不添加空块\n",
    "            chunk_data = {\n",
    "                \"text\": chunk,  # 块文本\n",
    "                \"metadata\": {\n",
    "                    \"start_char\": i,    # 文本块的起始字符索引\n",
    "                    \"end_char\": i + len(chunk)  # 文本块的结束字符索引\n",
    "                }\n",
    "            }\n",
    "            chunks.append(chunk_data)\n",
    "\n",
    "    print(f\"创建了 {len(chunks)} 个文本块\")  # 打印创建的块数\n",
    "    return chunks  # 返回块列表\n"
   ],
   "id": "e5a8df91a2302c81",
   "outputs": [],
   "execution_count": 4
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.489135Z",
     "start_time": "2025-04-29T01:46:16.485946Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def clean_text(text):\n",
    "    \"\"\"\n",
    "    通过移除多余的空白字符和特殊字符来清理文本。\n",
    "\n",
    "    Args:\n",
    "        text (str): 输入文本\n",
    "\n",
    "    Returns:\n",
    "        str: 清理后的文本\n",
    "    \"\"\"\n",
    "    # 将多个空白字符（包括换行符和制表符）替换为一个空格\n",
    "    text = re.sub(r'\\s+', ' ', text)\n",
    "\n",
    "    # 修复常见的OCR问题，将制表符和换行符替换为空格\n",
    "    text = text.replace('\\\\t', ' ')\n",
    "    text = text.replace('\\\\n', ' ')\n",
    "\n",
    "    # 移除开头和结尾的空白字符，并确保单词之间只有一个空格\n",
    "    text = ' '.join(text.split())\n",
    "\n",
    "    return text\n"
   ],
   "id": "76e557e2dbedb741",
   "outputs": [],
   "execution_count": 5
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 创建向量存储",
   "id": "c2fa9cde40bfb31f"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.500106Z",
     "start_time": "2025-04-29T01:46:16.495439Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def create_embeddings(texts):\n",
    "    \"\"\"\n",
    "    为给定的文本创建嵌入向量。\n",
    "\n",
    "    Args:\n",
    "        texts (str 或 List[str]): 输入文本（可以是单个字符串或字符串列表）\n",
    "        # model (str): 嵌入模型名称\n",
    "\n",
    "    返回:\n",
    "        List[List[float]]: 嵌入向量列表\n",
    "    \"\"\"\n",
    "    # 处理字符串和列表类型的输入\n",
    "    input_texts = texts if isinstance(texts, list) else [texts]\n",
    "\n",
    "    # 如果需要，按批次处理（OpenAI API 有请求限制）\n",
    "    batch_size = 100\n",
    "    all_embeddings = []\n",
    "\n",
    "    # 按批次迭代输入文本\n",
    "    for i in range(0, len(input_texts), batch_size):\n",
    "        batch = input_texts[i:i + batch_size]  # 获取当前批次的文本\n",
    "\n",
    "        # 为当前批次创建嵌入向量\n",
    "        response = client.embeddings.create(\n",
    "            model=embedding_model,\n",
    "            input=batch\n",
    "        )\n",
    "\n",
    "        # 从响应中提取嵌入向量\n",
    "        batch_embeddings = [item.embedding for item in response.data]\n",
    "        all_embeddings.extend(batch_embeddings)  # 将批次嵌入向量添加到总列表中\n",
    "\n",
    "    # 如果输入是单个字符串，仅返回第一个嵌入向量\n",
    "    if isinstance(texts, str):\n",
    "        return all_embeddings[0]\n",
    "\n",
    "    # 否则，返回所有嵌入向量\n",
    "    return all_embeddings\n"
   ],
   "id": "6b8cd9eb8c36429b",
   "outputs": [],
   "execution_count": 6
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.513968Z",
     "start_time": "2025-04-29T01:46:16.506145Z"
    }
   },
   "cell_type": "code",
   "source": [
    "class SimpleVectorStore:\n",
    "    \"\"\"\n",
    "    使用 NumPy 实现的简单向量存储。\n",
    "    \"\"\"\n",
    "    def __init__(self):\n",
    "        self.vectors = []  # 用于存储嵌入向量的列表\n",
    "        self.texts = []  # 用于存储文本内容的列表\n",
    "        self.metadata = []  # 用于存储元数据的列表\n",
    "\n",
    "    def add_item(self, text, embedding, metadata=None):\n",
    "        \"\"\"\n",
    "        向向量存储中添加一个项目。\n",
    "\n",
    "        Args:\n",
    "            text (str): 文本内容\n",
    "            embedding (List[float]): 嵌入向量\n",
    "            metadata (Dict, 可选): 额外的元数据\n",
    "        \"\"\"\n",
    "        self.vectors.append(np.array(embedding))  # 添加嵌入向量\n",
    "        self.texts.append(text)  # 添加文本内容\n",
    "        self.metadata.append(metadata or {})  # 添加元数据（如果为 None，则使用空字典）\n",
    "\n",
    "    def add_items(self, items, embeddings):\n",
    "        \"\"\"\n",
    "        向向量存储中添加多个项目。\n",
    "\n",
    "        Args:\n",
    "            items (List[Dict]): 文本项列表\n",
    "            embeddings (List[List[float]]): 嵌入向量列表\n",
    "        \"\"\"\n",
    "        for i, (item, embedding) in enumerate(zip(items, embeddings)):\n",
    "            self.add_item(\n",
    "                text=item[\"text\"],  # 从项中提取文本\n",
    "                embedding=embedding,  # 使用对应的嵌入\n",
    "                metadata={**item.get(\"metadata\", {}), \"index\": i}  # 合并项的元数据与索引\n",
    "            )\n",
    "\n",
    "    def similarity_search_with_scores(self, query_embedding, k=5):\n",
    "        \"\"\"\n",
    "        根据查询嵌入找到最相似的项目及其相似度分数。\n",
    "\n",
    "        Args:\n",
    "            query_embedding (List[float]): 查询嵌入向量\n",
    "            k (int): 返回的结果数量\n",
    "\n",
    "        Returns:\n",
    "            List[Tuple[Dict, float]]: 最相似的前 k 个项目及其分数\n",
    "        \"\"\"\n",
    "        if not self.vectors:\n",
    "            return []  # 如果没有存储向量，则返回空列表\n",
    "\n",
    "        # 将查询嵌入转换为 NumPy 数组\n",
    "        query_vector = np.array(query_embedding)\n",
    "\n",
    "        # 使用余弦相似度计算相似性\n",
    "        similarities = []\n",
    "        for i, vector in enumerate(self.vectors):\n",
    "            similarity = cosine_similarity([query_vector], [vector])[0][0]  # 计算余弦相似度\n",
    "            similarities.append((i, similarity))  # 添加索引和相似度分数\n",
    "\n",
    "        # 按相似度排序（降序）\n",
    "        similarities.sort(key=lambda x: x[1], reverse=True)\n",
    "\n",
    "        # 返回前 k 个结果及其分数\n",
    "        results = []\n",
    "        for i in range(min(k, len(similarities))):\n",
    "            idx, score = similarities[i]\n",
    "            results.append({\n",
    "                \"text\": self.texts[idx],  # 根据索引检索文本\n",
    "                \"metadata\": self.metadata[idx],  # 根据索引检索元数据\n",
    "                \"similarity\": float(score)  # 添加相似度分数\n",
    "            })\n",
    "\n",
    "        return results\n",
    "\n",
    "    def get_all_documents(self):\n",
    "        \"\"\"\n",
    "        获取存储中的所有文档。\n",
    "\n",
    "        Returns:\n",
    "            List[Dict]: 所有文档\n",
    "        \"\"\"\n",
    "        return [{\"text\": text, \"metadata\": meta} for text, meta in zip(self.texts, self.metadata)]  # 合并文本和元数据\n"
   ],
   "id": "e545b25fd0817c02",
   "outputs": [],
   "execution_count": 7
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## BM25 检索\n",
   "id": "89f7cca4747c61c9"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.526625Z",
     "start_time": "2025-04-29T01:46:16.523654Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def create_bm25_index(chunks):\n",
    "    \"\"\"\n",
    "    从给定的文本块创建 BM25 索引。\n",
    "\n",
    "    Args:\n",
    "        chunks (List[Dict]): 文本块列表\n",
    "\n",
    "    Returns:\n",
    "        BM25Okapi: BM25 索引\n",
    "    \"\"\"\n",
    "    # 从每个块中提取文本\n",
    "    texts = [chunk[\"text\"] for chunk in chunks]\n",
    "\n",
    "    # 按空白字符分割对每个文档进行分词\n",
    "    # tokenized_docs = [text.split() for text in texts]   # 英文\n",
    "    tokenized_docs = [list(jieba.cut(text)) for text in texts]  # 中文\n",
    "\n",
    "    # 使用分词后的文档创建 BM25 索引\n",
    "    bm25 = BM25Okapi(tokenized_docs)\n",
    "\n",
    "    # 打印 BM25 索引中的文档数量\n",
    "    print(f\"已创建包含 {len(texts)} 个文档的 BM25 索引\")\n",
    "\n",
    "    return bm25\n"
   ],
   "id": "b904ef94cba019eb",
   "outputs": [],
   "execution_count": 8
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.534101Z",
     "start_time": "2025-04-29T01:46:16.530166Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def bm25_search(bm25, chunks, query, k=5):\n",
    "    \"\"\"\n",
    "    使用查询在 BM25 索引中进行搜索。\n",
    "\n",
    "    Args:\n",
    "        bm25 (BM25Okapi): BM25 索引\n",
    "        chunks (List[Dict]): 文本块列表\n",
    "        query (str): 查询字符串\n",
    "        k (int): 返回的结果数量\n",
    "\n",
    "    Returns:\n",
    "        List[Dict]: 带有分数的前 k 个结果\n",
    "    \"\"\"\n",
    "    # 将查询按空格分割成单独的词\n",
    "    # query_tokens = query.split()  # 英文\n",
    "    query_tokens = list(jieba.cut(query))   # 中文\n",
    "\n",
    "    # 获取查询词对已索引文档的 BM25 分数\n",
    "    scores = bm25.get_scores(query_tokens)\n",
    "\n",
    "    # 初始化一个空列表，用于存储带有分数的结果\n",
    "    results = []\n",
    "\n",
    "    # 遍历分数和对应的文本块\n",
    "    for i, score in enumerate(scores):\n",
    "        # 创建元数据的副本以避免修改原始数据\n",
    "        metadata = chunks[i].get(\"metadata\", {}).copy()\n",
    "        # 向元数据中添加索引\n",
    "        metadata[\"index\"] = i\n",
    "\n",
    "        results.append({\n",
    "            \"text\": chunks[i][\"text\"],  # 文本内容\n",
    "            \"metadata\": metadata,  # 带索引的元数据\n",
    "            \"bm25_score\": float(score)  # BM25 分数\n",
    "        })\n",
    "\n",
    "    # 按 BM25 分数降序排序结果\n",
    "    results.sort(key=lambda x: x[\"bm25_score\"], reverse=True)\n",
    "\n",
    "    # 返回前 k 个结果\n",
    "    return results[:k]\n"
   ],
   "id": "e7c96b006efdd5ba",
   "outputs": [],
   "execution_count": 9
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 混合检索函数",
   "id": "ec18cee5a14b2b9"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.547772Z",
     "start_time": "2025-04-29T01:46:16.540233Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def fusion_retrieval(query, chunks, vector_store, bm25_index, k=5, alpha=0.5):\n",
    "    \"\"\"\n",
    "    执行融合检索，结合基于向量和BM25的搜索。\n",
    "\n",
    "    Args:\n",
    "        query (str): 查询字符串\n",
    "        chunks (List[Dict]): 原始文本块\n",
    "        vector_store (SimpleVectorStore): 向量存储\n",
    "        bm25_index (BM25Okapi): BM25 索引\n",
    "        k (int): 返回的结果数量\n",
    "        alpha (float): 向量分数的权重（0-1），其中 1-alpha 是 BM25 的权重\n",
    "\n",
    "    Returns:\n",
    "        List[Dict]: 基于综合分数的前 k 个结果\n",
    "    \"\"\"\n",
    "    print(f\"正在为查询执行融合检索: {query}\")\n",
    "\n",
    "    # 定义一个小的 epsilon 来避免除以零\n",
    "    epsilon = 1e-8\n",
    "\n",
    "    # 获取向量搜索结果\n",
    "    query_embedding = create_embeddings(query)  # 为查询创建嵌入\n",
    "    vector_results = vector_store.similarity_search_with_scores(query_embedding, k=len(chunks))  # 执行向量搜索\n",
    "\n",
    "    # 获取 BM25 搜索结果\n",
    "    bm25_results = bm25_search(bm25_index, chunks, query, k=len(chunks))  # 执行 BM25 搜索\n",
    "\n",
    "    # 创建字典将文档索引映射到分数\n",
    "    vector_scores_dict = {result[\"metadata\"][\"index\"]: result[\"similarity\"] for result in vector_results}\n",
    "    bm25_scores_dict = {result[\"metadata\"][\"index\"]: result[\"bm25_score\"] for result in bm25_results}\n",
    "\n",
    "    # 确保所有文档都有两种方法的分数\n",
    "    all_docs = vector_store.get_all_documents()\n",
    "    combined_results = []\n",
    "\n",
    "    for i, doc in enumerate(all_docs):\n",
    "        vector_score = vector_scores_dict.get(i, 0.0)  # 获取向量分数，如果未找到则为 0\n",
    "        bm25_score = bm25_scores_dict.get(i, 0.0)  # 获取 BM25 分数，如果未找到则为 0\n",
    "        combined_results.append({\n",
    "            \"text\": doc[\"text\"],\n",
    "            \"metadata\": doc[\"metadata\"],\n",
    "            \"vector_score\": vector_score,\n",
    "            \"bm25_score\": bm25_score,\n",
    "            \"index\": i\n",
    "        })\n",
    "\n",
    "    # 提取分数为数组\n",
    "    vector_scores = np.array([doc[\"vector_score\"] for doc in combined_results])\n",
    "    bm25_scores = np.array([doc[\"bm25_score\"] for doc in combined_results])\n",
    "\n",
    "    # 归一化分数\n",
    "    norm_vector_scores = (vector_scores - np.min(vector_scores)) / (np.max(vector_scores) - np.min(vector_scores) + epsilon)\n",
    "    norm_bm25_scores = (bm25_scores - np.min(bm25_scores)) / (np.max(bm25_scores) - np.min(bm25_scores) + epsilon)\n",
    "\n",
    "    # 计算综合分数\n",
    "    combined_scores = alpha * norm_vector_scores + (1 - alpha) * norm_bm25_scores\n",
    "\n",
    "    # 将综合分数添加到结果中\n",
    "    for i, score in enumerate(combined_scores):\n",
    "        combined_results[i][\"combined_score\"] = float(score)\n",
    "\n",
    "    # 按综合分数排序（降序）\n",
    "    combined_results.sort(key=lambda x: x[\"combined_score\"], reverse=True)\n",
    "\n",
    "    # 返回前 k 个结果\n",
    "    top_results = combined_results[:k]\n",
    "\n",
    "    print(f\"通过融合检索获取了 {len(top_results)} 份文档\")\n",
    "    return top_results\n"
   ],
   "id": "fed98835edfa77d3",
   "outputs": [],
   "execution_count": 10
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 文档处理流程",
   "id": "179fe96f470eb7f6"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.557550Z",
     "start_time": "2025-04-29T01:46:16.553893Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def process_document(pdf_path, chunk_size=1000, chunk_overlap=200):\n",
    "    \"\"\"\n",
    "    处理文档以用于融合检索。\n",
    "\n",
    "    Args:\n",
    "        pdf_path (str): PDF 文件的路径\n",
    "        chunk_size (int): 每个块的大小（以字符为单位）\n",
    "        chunk_overlap (int): 块之间的重叠大小（以字符为单位）\n",
    "\n",
    "    Returns:\n",
    "        Tuple[List[Dict], SimpleVectorStore, BM25Okapi]: 文本块、向量存储和 BM25 索引\n",
    "    \"\"\"\n",
    "    # 从 PDF 文件中提取文本\n",
    "    text = extract_text_from_pdf(pdf_path)\n",
    "\n",
    "    # 清理提取的文本，去除多余的空白和特殊字符\n",
    "    cleaned_text = clean_text(text)\n",
    "\n",
    "    # 将清理后的文本分割成重叠的块\n",
    "    chunks = chunk_text(cleaned_text, chunk_size, chunk_overlap)\n",
    "\n",
    "    # 从每个块中提取文本内容以创建嵌入\n",
    "    chunk_texts = [chunk[\"text\"] for chunk in chunks]\n",
    "    print(\"正在为文本块创建嵌入...\")\n",
    "\n",
    "    # 为文本块创建嵌入\n",
    "    embeddings = create_embeddings(chunk_texts)\n",
    "\n",
    "    # 初始化向量存储\n",
    "    vector_store = SimpleVectorStore()\n",
    "\n",
    "    # 将块及其嵌入添加到向量存储中\n",
    "    vector_store.add_items(chunks, embeddings)\n",
    "    print(f\"已向向量存储中添加 {len(chunks)} 个项目\")\n",
    "\n",
    "    # 从块中创建 BM25 索引\n",
    "    bm25_index = create_bm25_index(chunks)\n",
    "\n",
    "    # 返回文本块、向量存储和 BM25 索引\n",
    "    return chunks, vector_store, bm25_index\n"
   ],
   "id": "97149b94cbe9ef6d",
   "outputs": [],
   "execution_count": 11
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 回答生成",
   "id": "f8ad1f08af515f9c"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.566709Z",
     "start_time": "2025-04-29T01:46:16.563290Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def generate_response(query, context):\n",
    "    \"\"\"\n",
    "    根据查询和上下文生成响应。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        context (str): 从检索文档中提取的上下文\n",
    "\n",
    "    Returns:\n",
    "        str: 生成的响应\n",
    "    \"\"\"\n",
    "    # 定义系统提示，以指导AI助手\n",
    "    system_prompt = \"\"\"你是一个有用的AI助手。请根据提供的上下文回答用户问题。\n",
    "    如果上下文中没有包含足够信息来完整回答问题，请说明这一局限性。\"\"\"\n",
    "\n",
    "    # 使用上下文和查询格式化用户提示\n",
    "    user_prompt = f\"\"\"上下文内容:\n",
    "    {context}\n",
    "\n",
    "    问题: {query}\n",
    "\n",
    "    请根据提供的上下文回答问题。\"\"\"\n",
    "\n",
    "    # 使用OpenAI API生成响应\n",
    "    response = client.chat.completions.create(\n",
    "        model=llm_model,  # 指定要使用的模型\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\": system_prompt},  # 系统消息，用于指导助手\n",
    "            {\"role\": \"user\", \"content\": user_prompt}  # 用户消息，包含上下文和查询\n",
    "        ],\n",
    "        temperature=0.1  # 设置响应生成的温度\n",
    "    )\n",
    "\n",
    "    # 返回生成的响应\n",
    "    return response.choices[0].message.content\n"
   ],
   "id": "e27fa8a9f64c39f6",
   "outputs": [],
   "execution_count": 12
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 主要的检索函数",
   "id": "29dfcf12569becad"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.575479Z",
     "start_time": "2025-04-29T01:46:16.571337Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def answer_with_fusion_rag(query, chunks, vector_store, bm25_index, k=5, alpha=0.5):\n",
    "    \"\"\"\n",
    "    使用融合RAG方法回答查询。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        chunks (List[Dict]): 文本块列表\n",
    "        vector_store (SimpleVectorStore): 向量存储\n",
    "        bm25_index (BM25Okapi): BM25索引\n",
    "        k (int): 检索的文档数量\n",
    "        alpha (float): 向量得分的权重\n",
    "\n",
    "    Returns:\n",
    "        Dict: 包含检索到的文档和响应的查询结果\n",
    "    \"\"\"\n",
    "    # 使用融合检索方法检索文档\n",
    "    retrieved_docs = fusion_retrieval(query, chunks, vector_store, bm25_index, k=k, alpha=alpha)\n",
    "\n",
    "    # 通过连接检索到的文档文本并使用分隔符格式化上下文\n",
    "    context = \"\\n\\n---\\n\\n\".join([doc[\"text\"] for doc in retrieved_docs])\n",
    "\n",
    "    # 根据查询和格式化的上下文生成响应\n",
    "    response = generate_response(query, context)\n",
    "\n",
    "    # 返回查询、检索到的文档和生成的响应\n",
    "    return {\n",
    "        \"query\": query,\n",
    "        \"retrieved_documents\": retrieved_docs,\n",
    "        \"response\": response\n",
    "    }\n"
   ],
   "id": "e52f652f4fded1f3",
   "outputs": [],
   "execution_count": 13
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 比较检索方法",
   "id": "cf5eaf166246a3fa"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.584547Z",
     "start_time": "2025-04-29T01:46:16.581441Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def vector_only_rag(query, vector_store, k=5):\n",
    "    \"\"\"\n",
    "    仅使用基于向量的RAG回答查询。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        vector_store (SimpleVectorStore): 向量存储\n",
    "        k (int): 检索的文档数量\n",
    "\n",
    "    Returns:\n",
    "        Dict: 查询结果\n",
    "    \"\"\"\n",
    "    # 创建查询嵌入\n",
    "    query_embedding = create_embeddings(query)\n",
    "\n",
    "    # 使用基于向量的相似性搜索检索文档\n",
    "    retrieved_docs = vector_store.similarity_search_with_scores(query_embedding, k=k)\n",
    "\n",
    "    # 通过连接检索到的文档文本并使用分隔符格式化上下文\n",
    "    context = \"\\n\\n---\\n\\n\".join([doc[\"text\"] for doc in retrieved_docs])\n",
    "\n",
    "    # 根据查询和格式化的上下文生成响应\n",
    "    response = generate_response(query, context)\n",
    "\n",
    "    # 返回查询、检索到的文档和生成的响应\n",
    "    return {\n",
    "        \"query\": query,\n",
    "        \"retrieved_documents\": retrieved_docs,\n",
    "        \"response\": response\n",
    "    }\n"
   ],
   "id": "463aad85c406d1b1",
   "outputs": [],
   "execution_count": 14
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.593754Z",
     "start_time": "2025-04-29T01:46:16.590749Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def bm25_only_rag(query, chunks, bm25_index, k=5):\n",
    "    \"\"\"\n",
    "    仅使用BM25基础的RAG回答查询。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        chunks (List[Dict]): 文本块列表\n",
    "        bm25_index (BM25Okapi): BM25索引\n",
    "        k (int): 检索的文档数量\n",
    "\n",
    "    Returns:\n",
    "        Dict: 查询结果\n",
    "    \"\"\"\n",
    "    # 使用BM25搜索检索文档\n",
    "    retrieved_docs = bm25_search(bm25_index, chunks, query, k=k)\n",
    "\n",
    "    # 通过连接检索到的文档文本并使用分隔符格式化上下文\n",
    "    context = \"\\n\\n---\\n\\n\".join([doc[\"text\"] for doc in retrieved_docs])\n",
    "\n",
    "    # 根据查询和格式化的上下文生成响应\n",
    "    response = generate_response(query, context)\n",
    "\n",
    "    # 返回查询、检索到的文档和生成的响应\n",
    "    return {\n",
    "        \"query\": query,\n",
    "        \"retrieved_documents\": retrieved_docs,\n",
    "        \"response\": response\n",
    "    }\n"
   ],
   "id": "88a923900ab5900a",
   "outputs": [],
   "execution_count": 15
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 评估函数",
   "id": "8bbe3ed24eab0cd0"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.603694Z",
     "start_time": "2025-04-29T01:46:16.599869Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def compare_retrieval_methods(query, chunks, vector_store, bm25_index, k=5, alpha=0.5, reference_answer=None):\n",
    "    \"\"\"\n",
    "    比较不同检索方法对查询的效果。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        chunks (List[Dict]): 文本块列表\n",
    "        vector_store (SimpleVectorStore): 向量存储\n",
    "        bm25_index (BM25Okapi): BM25索引\n",
    "        k (int): 检索的文档数量\n",
    "        alpha (float): 融合检索中向量得分的权重\n",
    "        reference_answer (str, 可选): 用于比较的参考答案\n",
    "\n",
    "    Returns:\n",
    "        Dict: 比较结果\n",
    "    \"\"\"\n",
    "    print(f\"\\n=== 对查询 {query} 比较检索方法 ===\\n\")\n",
    "\n",
    "    # 运行仅向量RAG\n",
    "    print(\"\\n运行仅向量RAG...\")\n",
    "    vector_result = vector_only_rag(query, vector_store, k)\n",
    "\n",
    "    # 运行仅BM25 RAG\n",
    "    print(\"\\n运行仅BM25 RAG...\")\n",
    "    bm25_result = bm25_only_rag(query, chunks, bm25_index, k)\n",
    "\n",
    "    # 运行融合RAG\n",
    "    print(\"\\n运行融合RAG...\")\n",
    "    fusion_result = answer_with_fusion_rag(query, chunks, vector_store, bm25_index, k, alpha)\n",
    "\n",
    "    # 比较来自不同检索方法的响应\n",
    "    print(\"\\n比较响应...\")\n",
    "    comparison = evaluate_responses(\n",
    "        query,\n",
    "        vector_result[\"response\"],\n",
    "        bm25_result[\"response\"],\n",
    "        fusion_result[\"response\"],\n",
    "        reference_answer\n",
    "    )\n",
    "\n",
    "    # 返回比较结果\n",
    "    return {\n",
    "        \"query\": query,\n",
    "        \"vector_result\": vector_result,\n",
    "        \"bm25_result\": bm25_result,\n",
    "        \"fusion_result\": fusion_result,\n",
    "        \"comparison\": comparison\n",
    "    }\n"
   ],
   "id": "ac9af1089174ddf3",
   "outputs": [],
   "execution_count": 16
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.614986Z",
     "start_time": "2025-04-29T01:46:16.609609Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def evaluate_responses(query, vector_response, bm25_response, fusion_response, reference_answer=None):\n",
    "    \"\"\"\n",
    "    评估来自不同检索方法的响应。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        vector_response (str): 仅向量RAG的响应\n",
    "        bm25_response (str): 仅BM25 RAG的响应\n",
    "        fusion_response (str): 融合RAG的响应\n",
    "        reference_answer (str, 可选): 参考答案\n",
    "\n",
    "    Returns:\n",
    "        str: 响应的评估结果\n",
    "    \"\"\"\n",
    "    # 为评估人员提供系统提示，指导评估过程\n",
    "    system_prompt = \"\"\"你是一个RAG系统评估专家。请比较以下三种不同检索方法的回答：\n",
    "    1. 基于向量的检索：使用语义相似性进行文档检索\n",
    "    2. BM25关键词检索：使用关键词匹配进行文档检索\n",
    "    3. 融合检索：结合向量和关键词两种方法\n",
    "\n",
    "    根据以下标准评估回答：\n",
    "    - 与查询的相关性\n",
    "    - 事实准确性\n",
    "    - 回答的全面性\n",
    "    - 表达的清晰度和连贯性\"\"\"\n",
    "\n",
    "    # 包含查询和响应的用户提示\n",
    "    user_prompt = f\"\"\"查询: {query}\n",
    "\n",
    "    基于向量的回答内容:\n",
    "    {vector_response}\n",
    "\n",
    "    BM25关键词回答内容:\n",
    "    {bm25_response}\n",
    "\n",
    "    融合回答内容:\n",
    "    {fusion_response}\n",
    "    \"\"\"\n",
    "\n",
    "    # 如果提供了参考答案，则将其添加到提示中\n",
    "    if reference_answer:\n",
    "        user_prompt += f\"\"\"\n",
    "            参考答案:\n",
    "            {reference_answer}\n",
    "        \"\"\"\n",
    "\n",
    "    # 在用户提示中添加详细的比较说明\n",
    "    user_prompt += \"\"\"\n",
    "    请对这三种回答进行详细比较分析。对于此查询，哪种方法表现最佳？为什么？\n",
    "    请具体说明每种方法对于这个特定查询的优缺点。\n",
    "    \"\"\"\n",
    "\n",
    "    # 使用meta-llama/Llama-3.2-3B-Instruct生成评估\n",
    "    response = client.chat.completions.create(\n",
    "        model=llm_model,  # 指定使用的模型\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\": system_prompt},  # 系统消息，用于指导评估员\n",
    "            {\"role\": \"user\", \"content\": user_prompt}  # 用户消息，包含查询和响应\n",
    "        ],\n",
    "        temperature=0  # 设置响应生成的温度\n",
    "    )\n",
    "\n",
    "    # 返回生成的评估内容\n",
    "    return response.choices[0].message.content\n"
   ],
   "id": "dca61c0ad4eb456d",
   "outputs": [],
   "execution_count": 17
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 完整的评估流程",
   "id": "92867b9f91e10cab"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.625839Z",
     "start_time": "2025-04-29T01:46:16.621046Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def evaluate_fusion_retrieval(pdf_path, test_queries, reference_answers=None, k=5, alpha=0.5):\n",
    "    \"\"\"\n",
    "    评估融合检索与其他方法的对比效果。\n",
    "\n",
    "    Args:\n",
    "        pdf_path (str): PDF 文件路径\n",
    "        test_queries (List[str]): 测试查询列表\n",
    "        reference_answers (List[str], 可选): 参考答案列表\n",
    "        k (int): 检索文档的数量\n",
    "        alpha (float): 融合检索中向量分数的权重\n",
    "\n",
    "    Returns:\n",
    "        Dict: 评估结果\n",
    "    \"\"\"\n",
    "    print(\"=== 正在评估融合检索 ===\\n\")\n",
    "\n",
    "    # 处理文档以提取文本，创建片段，并构建向量和BM25索引\n",
    "    chunks, vector_store, bm25_index = process_document(pdf_path)\n",
    "\n",
    "    # 初始化一个列表以存储每个查询的结果\n",
    "    results = []\n",
    "\n",
    "    # 遍历每个测试查询\n",
    "    for i, query in enumerate(test_queries):\n",
    "        print(f\"\\n\\n=== 评估查询 {i+1}/{len(test_queries)} ===\")\n",
    "        print(f\"查询: {query}\")\n",
    "\n",
    "        # 如果存在，获取参考答案\n",
    "        reference = None\n",
    "        if reference_answers and i < len(reference_answers):\n",
    "            reference = reference_answers[i]\n",
    "\n",
    "        # 对当前查询比较不同检索方法\n",
    "        comparison = compare_retrieval_methods(\n",
    "            query,\n",
    "            chunks,\n",
    "            vector_store,\n",
    "            bm25_index,\n",
    "            k=k,\n",
    "            alpha=alpha,\n",
    "            reference_answer=reference\n",
    "        )\n",
    "\n",
    "        # 将比较结果添加到结果列表中\n",
    "        results.append(comparison)\n",
    "\n",
    "        # 打印来自不同检索方法的响应\n",
    "        print(\"\\n=== 基于向量的响应 ===\")\n",
    "        print(comparison[\"vector_result\"][\"response\"])\n",
    "\n",
    "        print(\"\\n=== BM25 响应 ===\")\n",
    "        print(comparison[\"bm25_result\"][\"response\"])\n",
    "\n",
    "        print(\"\\n=== 融合响应 ===\")\n",
    "        print(comparison[\"fusion_result\"][\"response\"])\n",
    "\n",
    "        print(\"\\n=== 比较 ===\")\n",
    "        print(comparison[\"comparison\"])\n",
    "\n",
    "    # 生成融合检索性能的整体分析\n",
    "    overall_analysis = generate_overall_analysis(results)\n",
    "\n",
    "    # 返回结果和整体分析\n",
    "    return {\n",
    "        \"results\": results,\n",
    "        \"overall_analysis\": overall_analysis\n",
    "    }\n"
   ],
   "id": "f061bed8d5e9a7e0",
   "outputs": [],
   "execution_count": 18
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:46:16.635629Z",
     "start_time": "2025-04-29T01:46:16.631460Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def generate_overall_analysis(results):\n",
    "    \"\"\"\n",
    "    生成融合检索的整体分析。\n",
    "\n",
    "    Args:\n",
    "        results (List[Dict]): 来自查询评估的结果\n",
    "\n",
    "    Returns:\n",
    "        str: 整体分析\n",
    "    \"\"\"\n",
    "    # 系统提示来指导评估过程\n",
    "    system_prompt = \"\"\"您是一位评估信息检索系统的专家。\n",
    "    根据多个测试查询，提供一个整体分析来比较以下三种检索方法：\n",
    "    1. 基于向量的检索（语义相似性）\n",
    "    2. BM25关键词检索（关键词匹配）\n",
    "    3. 融合检索（两者的组合）\n",
    "\n",
    "    关注点：\n",
    "    1. 每种方法表现最佳的查询类型\n",
    "    2. 每种方法的整体优缺点\n",
    "    3. 融合检索如何平衡权衡\n",
    "    4. 推荐使用每种方法的情景\"\"\"\n",
    "\n",
    "    # 创建每个查询的评估摘要\n",
    "    evaluations_summary = \"\"\n",
    "    for i, result in enumerate(results):\n",
    "        evaluations_summary += f\"查询 {i+1}: {result['query']}\\n\"\n",
    "        evaluations_summary += f\"比较摘要: {result['comparison'][:200]}...\\n\\n\"\n",
    "\n",
    "    # 用户提示包含评估摘要\n",
    "    user_prompt = f\"\"\"根据以下针对 {len(results)} 个查询的不同检索方法的评估结果，\n",
    "    提供一个对基于向量、BM25和融合检索方法的整体比较分析：\n",
    "\n",
    "    {evaluations_summary}\n",
    "\n",
    "    请提供对这些方法的全面分析，并强调融合检索在何时以及为什么能优于单独的方法。\"\"\"\n",
    "\n",
    "    # 使用模型生成整体分析\n",
    "    response = client.chat.completions.create(\n",
    "        model=llm_model,\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\": system_prompt},\n",
    "            {\"role\": \"user\", \"content\": user_prompt}\n",
    "        ],\n",
    "        temperature=0\n",
    "    )\n",
    "\n",
    "    # 返回生成的分析内容\n",
    "    return response.choices[0].message.content\n"
   ],
   "id": "db6fa8383a491a64",
   "outputs": [],
   "execution_count": 19
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 评估混合检索",
   "id": "b69d87cf6f7bb98"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:48:20.456015Z",
     "start_time": "2025-04-29T01:46:16.641069Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 定义一个与AI相关的测试查询\n",
    "test_queries = [\n",
    "    \"Transformer模型在自然语言处理中的主要应用有哪些？\"  # 特定于AI的查询\n",
    "\n",
    "]\n",
    "\n",
    "# 可选的参考答案\n",
    "reference_answers = [\n",
    "    \"Transformer models have revolutionized natural language processing with applications including machine translation, text summarization, question answering, sentiment analysis, and text generation. They excel at capturing long-range dependencies in text and have become the foundation for models like BERT, GPT, and T5.\",\n",
    "    \"Transformer模型通过包括机器翻译、文本摘要、问答、情感分析和文本生成等应用，彻底改变了自然语言处理领域。它们擅长捕捉文本中的长距离依赖关系，并已成为像BERT、GPT和T5这样的模型的基础。\"\n",
    "]\n",
    "\n",
    "\n",
    "# 设置参数\n",
    "k = 5  # 要检索的文档数量\n",
    "alpha = 0.5  # 向量评分权重（0.5表示向量和BM25权重相等）\n",
    "\n",
    "# 运行评估\n",
    "evaluation_results = evaluate_fusion_retrieval(\n",
    "    pdf_path=pdf_path,\n",
    "    test_queries=test_queries,\n",
    "    reference_answers=reference_answers,\n",
    "    k=k,\n",
    "    alpha=alpha\n",
    ")\n",
    "\n",
    "# 打印整体分析\n",
    "print(\"\\n\\n=== OVERALL ANALYSIS ===\\n\")\n",
    "print(evaluation_results[\"overall_analysis\"])\n"
   ],
   "id": "5410864af50c0efe",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=== 正在评估融合检索 ===\n",
      "\n",
      "创建了 13 个文本块\n",
      "正在为文本块创建嵌入...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Building prefix dict from the default dictionary ...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "已向向量存储中添加 13 个项目\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Dumping model to file cache C:\\Users\\jrj\\AppData\\Local\\Temp\\jieba.cache\n",
      "Loading model cost 0.505 seconds.\n",
      "Prefix dict has been built successfully.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "已创建包含 13 个文档的 BM25 索引\n",
      "\n",
      "\n",
      "=== 评估查询 1/1 ===\n",
      "查询: Transformer模型在自然语言处理中的主要应用有哪些？\n",
      "\n",
      "=== 对查询 Transformer模型在自然语言处理中的主要应用有哪些？ 比较检索方法 ===\n",
      "\n",
      "\n",
      "运行仅向量RAG...\n",
      "\n",
      "运行仅BM25 RAG...\n",
      "\n",
      "运行融合RAG...\n",
      "正在为查询执行融合检索: Transformer模型在自然语言处理中的主要应用有哪些？\n",
      "通过融合检索获取了 5 份文档\n",
      "\n",
      "比较响应...\n",
      "\n",
      "=== 基于向量的响应 ===\n",
      "根据提供的上下文，Transformer模型在自然语言处理（NLP）中的主要应用包括以下领域（尽管上下文中未直接提及\"Transformer\"模型，但基于NLP技术的描述可推断其典型应用场景）：\n",
      "\n",
      "1. **机器翻译**  \n",
      "   上下文明确提到NLP技术应用于机器翻译，而Transformer模型（如Google的BERT、OpenAI的GPT等）已成为现代机器翻译的核心架构。\n",
      "\n",
      "2. **文本摘要**  \n",
      "   文中提到NLP技术用于生成文本摘要，Transformer通过自注意力机制能有效处理长文本的语义压缩。\n",
      "\n",
      "3. **情感分析**  \n",
      "   上下文列举NLP在情感分析中的应用，Transformer模型可精准识别文本中的情感倾向。\n",
      "\n",
      "4. **聊天机器人**  \n",
      "   NLP技术被用于客服聊天机器人，Transformer的生成能力（如GPT系列）使其能实现更自然的对话交互。\n",
      "\n",
      "5. **内容生成**  \n",
      "   虽然未直接关联NLP章节，但后文提到AI生成文章、脚本等内容，Transformer模型（如GPT-3）是当前文本生成的主流技术。\n",
      "\n",
      "**局限性说明**：  \n",
      "上下文未明确提及\"Transformer\"这一术语，因此上述回答是基于NLP应用领域与Transformer模型实际技术地位的合理推断。若需更具体的Transformer架构细节（如自注意力机制），需补充其他资料。\n",
      "\n",
      "=== BM25 响应 ===\n",
      "根据提供的上下文，Transformer模型在自然语言处理（NLP）中的主要应用包括以下领域（上下文直接提及或相关技术延伸）：\n",
      "\n",
      "1. **机器翻译**  \n",
      "   - 上下文明确提到NLP技术应用于机器翻译，而Transformer模型（如Google的BERT、OpenAI的GPT等）是当前机器翻译的核心架构，替代了传统的RNN/CNN模型。\n",
      "\n",
      "2. **文本生成**  \n",
      "   - 生成式AI部分提到Transformer能够生成原创文本内容，例如GPT系列模型广泛用于文章写作、对话生成等任务。\n",
      "\n",
      "3. **情感分析**  \n",
      "   - 上下文列举了NLP在情感分析中的应用，Transformer模型通过捕捉上下文语义显著提升了情感分类的准确性。\n",
      "\n",
      "4. **文本摘要**  \n",
      "   - NLP应用部分提到文本摘要任务，Transformer的注意力机制适合提取关键信息生成摘要（如BART、T5等模型）。\n",
      "\n",
      "5. **聊天机器人**  \n",
      "   - 在金融和零售领域的应用中，提到NLP驱动客服聊天机器人，Transformer模型（如DialoGPT）是实现自然对话的主流技术。\n",
      "\n",
      "6. **语音识别与交互**  \n",
      "   - 虽然上下文未直接关联Transformer与语音识别，但NLP部分提到语音识别任务，而Transformer已扩展至语音领域（如Whisper模型）。\n",
      "\n",
      "**局限性说明**：  \n",
      "上下文未明确列出“Transformer”这一术语，但提到的NLP任务（如翻译、文本生成）和生成式AI部分（如“原创文本生成”）均依赖Transformer架构。因此，答案基于上下文任务与Transformer技术实际应用的关联推断得出。\n",
      "\n",
      "=== 融合响应 ===\n",
      "根据提供的上下文，Transformer模型在自然语言处理（NLP）中的主要应用包括以下内容：\n",
      "\n",
      "1. **语言翻译**：上下文明确提到NLP技术广泛应用于机器翻译（如第六章提到的\"语言翻译\"任务），而Transformer模型是当前机器翻译的主流架构。\n",
      "\n",
      "2. **文本生成**：第十六章提到生成式AI模型（如Transformer）能够创作原创文本内容，这包括聊天机器人、文本摘要等应用场景。\n",
      "\n",
      "3. **情感分析**：上下文中多次提及NLP应用于情感分析任务（如RNN部分和NLP概述部分），Transformer模型在此领域具有显著优势。\n",
      "\n",
      "4. **交互式媒体**：第十七章提到Transformer等生成模型被用于增强视频游戏和虚拟现实中的交互体验，包括动态文本生成和对话系统。\n",
      "\n",
      "5. **语音识别**：虽然上下文更多关联RNN与语音识别，但Transformer模型当前也被广泛应用于该领域（在深度学习章节提及的语音识别相关应用）。\n",
      "\n",
      "需要注意的是，上下文未明确列出Transformer模型的所有应用，但通过NLP应用领域和生成式AI部分的描述，可以推断出这些主要应用方向。\n",
      "\n",
      "=== 比较 ===\n",
      "### 比较分析\n",
      "\n",
      "#### 1. 基于向量的检索回答\n",
      "**优点**：\n",
      "- **相关性**：通过语义相似性捕捉到了NLP应用与Transformer模型的潜在关联，即使上下文未明确提及\"Transformer\"术语。\n",
      "- **全面性**：覆盖了机器翻译、文本摘要、情感分析、聊天机器人和内容生成等主要应用领域。\n",
      "- **清晰度**：明确说明了回答是基于推断，并指出了局限性，增强了可信度。\n",
      "\n",
      "**缺点**：\n",
      "- **事实准确性**：由于上下文未直接提及Transformer，部分推断可能不够精确（如未区分Transformer与其他NLP技术的具体差异）。\n",
      "- **细节缺失**：未提到Transformer特有的技术优势（如自注意力机制），也未涵盖参考答案中的\"question answering\"等应用。\n",
      "\n",
      "#### 2. BM25关键词检索回答\n",
      "**优点**：\n",
      "- **相关性**：通过关键词匹配（如\"机器翻译\"、\"文本生成\"）直接关联上下文与Transformer的实际应用，相关性较强。\n",
      "- **全面性**：不仅覆盖了参考答案的主要应用，还额外提到\"语音识别与交互\"这一扩展领域。\n",
      "- **事实准确性**：明确引用上下文中的具体章节（如生成式AI部分），增强了答案的准确性。\n",
      "\n",
      "**缺点**：\n",
      "- **冗余信息**：包含与Transformer关联较弱的领域（如语音识别），可能偏离查询核心。\n",
      "- **技术深度不足**：未解释Transformer为何适合这些任务（如长距离依赖处理），仅停留在任务列举层面。\n",
      "\n",
      "#### 3. 融合检索回答\n",
      "**优点**：\n",
      "- **相关性**：结合语义和关键词，既捕捉到NLP应用的广泛关联，又精准定位上下文中的具体章节（如第十六章生成式AI）。\n",
      "- **全面性**：涵盖语言翻译、文本生成、情感分析等核心应用，并补充了\"交互式媒体\"这一创新场景。\n",
      "- **清晰度**：通过章节引用和任务分类，使回答结构清晰，同时说明推断依据。\n",
      "\n",
      "**缺点**：\n",
      "- **技术细节不足**：与BM25回答类似，未深入解释Transformer的架构优势。\n",
      "- **部分领域牵强**：\"交互式媒体\"虽相关，但并非Transformer在NLP中的典型应用，可能分散焦点。\n",
      "\n",
      "---\n",
      "\n",
      "### 方法表现排名（从优到劣）\n",
      "1. **融合检索**  \n",
      "   - **最佳原因**：平衡了相关性与全面性，既通过关键词锁定上下文具体内容，又通过语义扩展覆盖合理推断的应用场景（如交互式媒体）。章节引用增强了答案的可信度，且结构清晰。\n",
      "\n",
      "2. **BM25关键词检索**  \n",
      "   - **次优原因**：相关性高但稍显冗余，虽精准匹配关键词，但包含少量边缘信息（如语音识别）。任务列举全面但缺乏技术背景说明。\n",
      "\n",
      "3. **基于向量的检索**  \n",
      "   - **较弱原因**：依赖语义推断导致部分应用（如内容生成）关联性较弱，且未引用上下文具体位置，准确性略逊于其他方法。\n",
      "\n",
      "---\n",
      "\n",
      "### 改进建议\n",
      "- **技术深度**：所有方法均可补充Transformer的核心优势（如自注意力机制），以解释其为何适合所列应用。\n",
      "- **精准过滤**：BM25和融合检索需剔除低关联领域（如语音识别），更聚焦NLP核心任务。\n",
      "- **参考答案对齐**：可增加\"question answering\"等参考答案提到的应用，提升覆盖度。\n",
      "\n",
      "\n",
      "=== OVERALL ANALYSIS ===\n",
      "\n",
      "### 全面比较分析：基于向量、BM25和融合检索方法\n",
      "\n",
      "#### 1. 基于向量的检索（语义相似性）\n",
      "**表现最佳的查询类型**：  \n",
      "- 概念性、语义宽泛的查询（如本例的\"Transformer模型应用\"）  \n",
      "- 需要联想推理的场景（如\"与神经网络相关的技术\"）  \n",
      "- 存在术语变体/同义词的查询（如\"文本生成\"vs\"内容创作\"）\n",
      "\n",
      "**优点**：  \n",
      "• **语义泛化能力**：通过嵌入空间捕捉\"应用\"的潜在关联，即使文档未显式提及\"Transformer\"（如返回文本摘要技术的通用论文）  \n",
      "• **领域迁移性**：可识别跨领域关联（如将CV中的ViT论文关联到NLP应用）  \n",
      "• **长尾覆盖**：对低频但语义相关的内容更敏感  \n",
      "\n",
      "**缺点**：  \n",
      "• **术语精确性不足**：可能返回仅语义相关但未实际讨论Transformer的文档  \n",
      "• **可解释性差**：相似度计算过程不透明  \n",
      "• **领域偏差风险**：受训练数据分布影响大  \n",
      "\n",
      "#### 2. BM25关键词检索（关键词匹配）  \n",
      "**表现最佳的查询类型**：  \n",
      "- 术语明确的精确查询（如\"BERT模型架构\"）  \n",
      "- 需要技术细节的场景（如\"Transformer的层归一化实现\"）  \n",
      "- 存在标准表述的领域（如学术论文检索）  \n",
      "\n",
      "**优点**：  \n",
      "• **术语精确性**：严格匹配\"Transformer\"+\"应用\"等关键词组合  \n",
      "• **可预测性**：遵循布尔逻辑，结果可解释  \n",
      "• **计算效率**：无需向量化处理  \n",
      "\n",
      "**缺点**：  \n",
      "• **词汇鸿沟问题**：无法处理\"注意力机制\"→\"self-attention\"等术语变体  \n",
      "• **零结果风险**：对长尾表述（如\"基于注意力的NLP模型\"）不敏感  \n",
      "• **上下文盲区**：可能返回仅罗列应用名称但无实质分析的文档  \n",
      "\n",
      "#### 3. 融合检索（语义+关键词）  \n",
      "**平衡机制**：  \n",
      "- **加权混合**：如BM25分数×0.6 + 向量分数×0.4  \n",
      "- **级联筛选**：先用BM25做初筛，再用语义排序  \n",
      "- **交叉验证**：仅保留双方都高排名的文档  \n",
      "\n",
      "**优于单方法的情况**：  \n",
      "1. **术语+语义双重要求**的查询（如本例需同时满足\"Transformer\"和\"应用\"的语义）  \n",
      "2. **对抗噪声场景**：  \n",
      "   - 过滤BM25返回的术语匹配但内容无关文档（如仅标题含Transformer的广告）  \n",
      "   - 修正向量检索的语义漂移（如将GPT讨论误判为Transformer应用）  \n",
      "3. **长尾需求**：当查询包含专业术语（BM25保障）和抽象概念（向量保障）时  \n",
      "\n",
      "#### 推荐使用场景  \n",
      "| 方法                | 典型场景                                                                 |\n",
      "|---------------------|--------------------------------------------------------------------------|\n",
      "| **纯向量检索**       | 初创企业知识库（术语不规范）、跨领域研究、用户查询表述模糊时            |\n",
      "| **纯BM25**          | 技术文档检索、专利搜索、需要严格术语匹配的法律/医疗场景                 |\n",
      "| **融合检索**        | 学术文献综述、企业级搜索系统、需要平衡召回率与精确度的商业智能场景      |\n",
      "\n",
      "#### 针对本例的优化建议  \n",
      "对于\"Transformer应用\"类查询，建议：  \n",
      "1. 构建**术语增强向量**：在嵌入阶段将\"Transformer\"与\"BERT/GPT\"等别名关联  \n",
      "2. 设计**动态融合权重**：当BM25高分文档＜5时增加语义权重  \n",
      "3. 添加**后过滤层**：使用规则引擎过滤明显无关类型（如纯硬件加速论文）  \n",
      "\n",
      "这种组合策略能在保持90%+相关性的同时，将完全无关结果控制在5%以下（实测比单方法降低40%的bad cases）。\n"
     ]
    }
   ],
   "execution_count": 20
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-29T01:48:20.488934Z",
     "start_time": "2025-04-29T01:48:20.485407Z"
    }
   },
   "cell_type": "code",
   "source": [
    "print(\"\\n\\n=== RESULTS ===\\n\")\n",
    "print(json.dumps(evaluation_results, indent=4, ensure_ascii=False))"
   ],
   "id": "7d218fea026291d7",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "=== RESULTS ===\n",
      "\n",
      "{\n",
      "    \"results\": [\n",
      "        {\n",
      "            \"query\": \"Transformer模型在自然语言处理中的主要应用有哪些？\",\n",
      "            \"vector_result\": {\n",
      "                \"query\": \"Transformer模型在自然语言处理中的主要应用有哪些？\",\n",
      "                \"retrieved_documents\": [\n",
      "                    {\n",
      "                        \"text\": \"nlinedoctranslator.com 强化学习 强化学习涉及训练代理在特定环境中做出决策，以最⼤化奖励。代理通过反复试验进⾏学习，并以 奖励或惩罚的形式接收反馈。这种⽅法应⽤于游戏、机器⼈技术和资源管理。 深度学习 深度学习是机器学习的⼀个⼦领域，它使⽤多层⼈⼯神经⽹络（深度神经⽹络）来分析数据。这些 ⽹络的设计灵感来源于⼈脑的结构和功能。深度学习在图像识别、⾃然语⾔处理和语⾳识别等领域 取得了重⼤突破。 卷积神经⽹络（CNN） CNN 是⼀种深度神经⽹络，尤其适⽤于处理图像和视频。它们使⽤卷积层⾃动从输⼊数据中学习 特征。CNN ⼴泛应⽤于物体检测、⾯部识别和医学图像分析。 循环神经⽹络（RNN） RNN 旨在处理序列数据，例如⽂本和时间序列。它们具有反馈连接，可使信息随时间持续存在， 因此⾮常适合语⾔翻译、语⾳识别和情感分析等任务。 ⾃然语⾔处理（NLP） ⾃然语⾔处理 (NLP) 是⼈⼯智能的⼀个分⽀，致⼒于使计算机能够理解、解释和⽣成⼈类语⾔。 NLP 技术⼴泛应⽤于聊天机器⼈、机器翻译、⽂本摘要和情感分析。 计算机视觉 计算机视觉是⼈⼯智能的⼀个领域，它使计算机能够“查看”并解读图像和视频。这涉及物体检 测、图像分割和⾯部识别等任务。计算机视觉⼴泛应⽤于⾃动驾驶汽⻋、医学成像和监控系统。 第三章：⼈⼯智能的应⽤ ⼈⼯智能的应⽤范围⾮常⼴泛，并正在不断扩展到各个⾏业和领域。这些应⽤包括： 卫⽣保健 ⼈⼯智能正在通过医疗诊断、药物研发、个性化医疗和机器⼈⼿术等应⽤改变医疗保健。⼈⼯智能 ⼯具可以分析医学图像、预测患者预后并协助制定治疗计划。 ⾦融 在⾦融领域，⼈⼯智能⽤于欺诈检测、算法交易、⻛险管理和客⼾服务。⼈⼯智能算法可以分析⼤ 型数据集，以识别模式、预测市场趋势并实现财务流程⾃动化。 运输 随着⾃动驾驶汽⻋、交通优化系统和物流管理的发展，⼈⼯智能正在彻底改变交通运输。⾃动驾驶 汽⻋利⽤⼈ ⼯智能感知周围环境、做出驾驶决策并安全⾏驶。 零售 零售⾏业利⽤⼈⼯智能进⾏个性化推荐、库存管理、客服聊天机器⼈和供应链优化。⼈⼯智能系统 可以分析客⼾数据，预测需求、提供个性化优惠并改善购物体验。 制造业 ⼈⼯智能在制造业中⽤于预测性维护、质量控制、流程优化和机器⼈技术。⼈⼯智能系统可以监控 设备、检测异常并⾃动执⾏任务，从⽽提⾼效率并降低成本。 教育 ⼈⼯智\",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 800,\n",
      "                            \"end_char\": 1800,\n",
      "                            \"index\": 1\n",
      "                        },\n",
      "                        \"similarity\": 0.7660488303199339\n",
      "                    },\n",
      "                    {\n",
      "                        \"text\": \"题也随之⽽来。为⼈⼯智能的开发 和部署建⽴清晰的指导⽅针和道德框架⾄关重要。 ⼈⼯智能武器化 ⼈⼯智能在⾃主武器系统中的潜在应⽤引发了重⼤的伦理和安全担忧。需要开展国际讨论并制定相 关法规，以应对⼈⼯智能武器的相关⻛险。 第五章：⼈⼯智能的未来 ⼈⼯智能的未来很可能以持续进步和在各个领域的⼴泛应⽤为特征。关键趋势和发展领域包括： 可解释⼈⼯智能（XAI） 可解释⼈⼯智能 (XAI) 旨在使⼈⼯智能系统更加透明易懂。XAI 技术正在开发中，旨在深⼊了解⼈ ⼯智能模型的决策⽅式，从⽽增强信任度和责任感。 边缘⼈⼯智能 边缘⼈⼯智能是指在设备上本地处理数据，⽽不是依赖云服务器。这种⽅法可以减少延迟，增强隐 私保护，并在连接受限的环境中⽀持⼈⼯智能应⽤。 量⼦计算和⼈⼯智能 量⼦计算有望显著加速⼈⼯智能算法，从⽽推动药物研发、材料科学和优化等领域的突破。量⼦计 算与⼈⼯智能的交叉研究前景⼴阔。 ⼈机协作 ⼈⼯智能的未来很可能涉及⼈类与⼈⼯智能系统之间更紧密的协作。这包括开发能够增强⼈类能 ⼒、⽀持决策和提⾼⽣产⼒的⼈⼯智能⼯具。 ⼈⼯智能造福社会 ⼈⼯智能正⽇益被⽤于应对社会和环境挑战，例如⽓候变化、贫困和医疗保健差距。“⼈⼯智能造 福社会”倡议旨在利⽤⼈⼯智能产⽣积极影响。 监管与治理 随着⼈⼯智能⽇益普及，监管和治理的需求将⽇益增⻓，以确保负责任的开发和部署。这包括制定 道德准则、解决偏⻅和公平问题，以及保护隐私和安全。国际标准合作⾄关重要。 通过了解⼈⼯智能的核⼼概念、应⽤、伦理影响和未来发展⽅向，我们可以更好地应对这项变⾰性 技术带来的机遇和挑战。持续的研究、负责任的开发和周到的治理，对于充分发挥⼈⼯智能的潜⼒ 并降低其⻛险⾄关重要。 第六章：⼈⼯智能和机器⼈技术 ⼈⼯智能与机器⼈技术的融合 ⼈⼯智能与机器⼈技术的融合，将机器⼈的物理能⼒与⼈⼯智能的认知能⼒完美结合。这种协同效 应使机器⼈能够执⾏复杂的任务，适应不断变化的环境，并与⼈类更⾃然地互动。⼈⼯智能机器⼈ ⼴泛应⽤于制造业、医疗保健、物流和勘探领域。 机器⼈的类型 ⼯业机器⼈ ⼯业机器⼈在制造业中⽤于执⾏焊接、喷漆、装配和物料搬运等任务。⼈⼯智能提升了它们的精 度、效率和适应性，使它们能够在协作环境中与⼈类并肩⼯作（协作机器⼈）。 服务机器⼈ 服务机器⼈协助⼈类完成各种任务，包括清洁、送货、客⼾服务和医疗保\",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 2400,\n",
      "                            \"end_char\": 3400,\n",
      "                            \"index\": 3\n",
      "                        },\n",
      "                        \"similarity\": 0.7366053602941204\n",
      "                    },\n",
      "                    {\n",
      "                        \"text\": \"理解⼈⼯智能 第⼀章：⼈⼯智能简介 ⼈⼯智能 (AI) 是指数字计算机或计算机控制的机器⼈执⾏通常与智能⽣物相关的任务的能⼒。该术 语通常⽤于开发具有⼈类特有的智⼒过程的系统，例如推理、发现意义、概括或从过往经验中学习 的能⼒。在过去的⼏⼗年中，计算能⼒和数据可⽤性的进步显著加速了⼈⼯智能的开发和部署。 历史背景 ⼈⼯智能的概念已存在数个世纪，经常出现在神话和⼩说中。然⽽，⼈⼯智能研究的正式领域始于 20世纪中叶。1956年的达特茅斯研讨会被⼴泛认为是⼈⼯智能的发源地。早期的⼈⼯智能研究侧 重于问题解决和符号⽅法。20世纪80年代专家系统兴起，⽽20世纪90年代和21世纪初，机器学习 和神经⽹络取得了进步。深度学习的最新突破彻底改变了这⼀领域。 现代观察 现代⼈⼯智能系统在⽇常⽣活中⽇益普及。从 Siri 和 Alexa 等虚拟助⼿，到流媒体服务和社交媒体 上的推荐算法，⼈⼯智能正在影响我们的⽣活、⼯作和互动⽅式。⾃动驾驶汽⻋、先进的医疗诊断 技术以及复杂的⾦融建模⼯具的发展，彰显了⼈⼯智能应⽤的⼴泛性和持续增⻓。此外，⼈们对其 伦理影响、偏⻅和失业的担忧也⽇益凸显。 第⼆章：⼈⼯智能的核⼼概念 机器学习 机器学习 (ML) 是⼈⼯智能的⼀个分⽀，专注于使系统⽆需明确编程即可从数据中学习。机器学习 算法能够识别模式、做出预测，并随着接触更多数据⽽不断提升其性能。 监督学习 在监督学习中，算法基于标记数据进⾏训练，其中输⼊数据与正确的输出配对。这使得算法能够学 习输⼊和输出之间的关系，并对新的、未知的数据进⾏预测。⽰例包括图像分类和垃圾邮件检测。 ⽆监督学习 ⽆监督学习算法基于未标记数据进⾏训练，算法必须在没有明确指导的情况下发现数据中的模式和 结构。常⽤技术包括聚类（将相似的数据点分组）和降维（在保留重要信息的同时减少变量数 量）。 从英语翻译成中⽂(简体) - www.onlinedoctranslator.com 强化学习 强化学习涉及训练代理在特定环境中做出决策，以最⼤化奖励。代理通过反复试验进⾏学习，并以 奖励或惩罚的形式接收反馈。这种⽅法应⽤于游戏、机器⼈技术和资源管理。 深度学习 深度学习是机器学习的⼀个⼦领域，它使⽤多层⼈⼯神经⽹络（深度神经⽹络）来分析数据。这些 ⽹络的设计灵感来源于⼈脑的结构和功能。深度学习在图像识别、⾃然语⾔处理和语⾳识别等领域 \",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 0,\n",
      "                            \"end_char\": 1000,\n",
      "                            \"index\": 0\n",
      "                        },\n",
      "                        \"similarity\": 0.7357967220848057\n",
      "                    },\n",
      "                    {\n",
      "                        \"text\": \"改变交通运输。⾃动驾驶 汽⻋利⽤⼈ ⼯智能感知周围环境、做出驾驶决策并安全⾏驶。 零售 零售⾏业利⽤⼈⼯智能进⾏个性化推荐、库存管理、客服聊天机器⼈和供应链优化。⼈⼯智能系统 可以分析客⼾数据，预测需求、提供个性化优惠并改善购物体验。 制造业 ⼈⼯智能在制造业中⽤于预测性维护、质量控制、流程优化和机器⼈技术。⼈⼯智能系统可以监控 设备、检测异常并⾃动执⾏任务，从⽽提⾼效率并降低成本。 教育 ⼈⼯智能正在通过个性化学习平台、⾃动评分系统和虚拟导师提升教育⽔平。⼈⼯智能⼯具可以适 应学⽣的个性化需求，提供反馈，并打造定制化的学习体验。 娱乐 娱乐⾏业将⼈⼯智能⽤于内容推荐、游戏开发和虚拟现实体验。⼈⼯智能算法分析⽤⼾偏好，推荐 电影、⾳乐和游戏，从⽽增强⽤⼾参与度。 ⽹络安全 ⼈⼯智能在⽹络安全领域⽤于检测和应对威胁、分析⽹络流量以及识别漏洞。⼈⼯智能系统可以⾃ 动执⾏安全任务，提⾼威胁检测的准确性，并增强整体⽹络安全态势。 第四章：⼈⼯智能的伦理和社会影响 ⼈⼯智能的快速发展和部署引发了重⼤的伦理和社会担忧。这些担忧包括： 偏⻅与公平 ⼈⼯智能系统可能会继承并放⼤其训练数据中存在的偏⻅，从⽽导致不公平或歧视性的结果。确保 ⼈⼯智能系统的公平性并减少偏⻅是⼀项关键挑战。 透明度和可解释性 许多⼈⼯智能系统，尤其是深度学习模型，都是“⿊匣⼦”，很难理解它们是如何做出决策的。增 强透明度和可解释性对于建⽴信任和问责⾄关重要。 隐私和安全 ⼈⼯智能系统通常依赖⼤量数据，这引发了⼈们对隐私和数据安全的担忧。保护敏感信息并确保负 责任的数据处理⾄关重要。 ⼯作岗位流失 ⼈⼯智能的⾃动化能⼒引发了⼈们对⼯作岗位流失的担忧，尤其是在重复性或常规性任务的⾏业。 应对⼈⼯智能驱动的⾃动化带来的潜在经济和社会影响是⼀项关键挑战。 ⾃主与控制 随着⼈⼯智能系统⽇益⾃主，控制、问责以及潜在意外后果的问题也随之⽽来。为⼈⼯智能的开发 和部署建⽴清晰的指导⽅针和道德框架⾄关重要。 ⼈⼯智能武器化 ⼈⼯智能在⾃主武器系统中的潜在应⽤引发了重⼤的伦理和安全担忧。需要开展国际讨论并制定相 关法规，以应对⼈⼯智能武器的相关⻛险。 第五章：⼈⼯智能的未来 ⼈⼯智能的未来很可能以持续进步和在各个领域的⼴泛应⽤为特征。关键趋势和发展领域包括： 可解释⼈⼯智能（XAI） 可解释⼈⼯智能 (XAI) 旨在使⼈⼯智能\",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 1600,\n",
      "                            \"end_char\": 2600,\n",
      "                            \"index\": 2\n",
      "                        },\n",
      "                        \"similarity\": 0.7324536094416246\n",
      "                    },\n",
      "                    {\n",
      "                        \"text\": \"统可以创作艺术、⾳乐和⽂学作品，辅助 设计流程，并加速科学发现。 ⼈⼯智能⽣成的艺术 ⼈⼯智能算法可以创作原创艺术作品，包括绘画、素描和雕塑。这些系统从现有艺术作品中学习， 并创作出展现独特⻛格和图案的新作品。 ⼈⼯智能在⾳乐创作中的应⽤ ⼈⼯智能被⽤于作曲、⽣成旋律和编曲。⼈⼯智能⼯具可以辅助⾳乐家的创作过程，为⾳乐表达提 供全新的可能性。 ⼈⼯智能在写作和内容创作中的应⽤ ⼈⼯智能⽤于撰写⽂章、⽣成内容和创作脚本。⼈⼯智能写作⼯具可以协助作者进⾏研究、编辑和 内容⽣成，从⽽提⾼⽣产⼒和创造⼒。 ⼈⼯智能驱动的创新 ⼈⼯智能通过分析海量数据集、识别模式并⽣成新想法来加速创新。⼈⼯智能⼯具⼴泛应⽤于各⾏ 各业的研发、产品设计和问题解决。 第⼗章：⼈⼯智能与教育 个性化学习 ⼈⼯智能能够根据学⽣的个⼈需求和学习⻛格，提供个性化的学习体验。⼈⼯智能平台提供定制化 的内容、反馈和学习进度，从⽽提升学⽣的参与度和学习成果。 ⾃适应评估 ⼈⼯智能评估会根据学⽣的表现调整题⽬难度，从⽽更准确地衡量学⽣的知识和技能。⾃适应评估 还能发现学习差距，并为教学策略提供参考。 虚拟导师和学习助⼿ ⼈⼯智能虚拟导师和学习助⼿为学⽣提供个性化⽀持，解答疑问、提供指导并跟踪学习进度。这些 ⼯具扩⼤了教育覆盖⾯，并提升了学习成果。 ⾃动评分和反馈 ⼈⼯智能⾃动化评分和反馈流程，节省教育⼯作者的时间，并及时为学⽣提供反馈。⼈⼯智能系统 可以评估论⽂、作业和考试，找出需要改进的地⽅。 教育数据挖掘 教育数据挖掘利⽤⼈⼯智能分析学⽣数据，识别学习模式并预测学习成果。这些信息可以为教学策 略提供参考，改进教育项⽬，并增强学⽣⽀持服务。 第 11 章：⼈⼯智能与医疗保健 医疗诊断与治疗 ⼈⼯智能正在通过分析医学影像、预测患者预后并协助制定治疗计划，彻底改变医学诊断和治疗。 ⼈⼯智能⼯具能够提⾼准确性、效率和患者护理⽔平。 药物研发 ⼈⼯智能通过分析⽣物数据、预测药物疗效和识别潜在候选药物，加速药物的发现和开发。⼈⼯智 能系统缩短了新疗法上市的时间并降低了成本。 个性化医疗 ⼈⼯智能通过分析个体患者数据、预测治疗反应并制定⼲预措施，实现个性化医疗。个性化医疗可 提⾼治疗效果并减少不良反应。 机器⼈⼿术 ⼈⼯智能机器⼈⼿术系统能够帮助外科医⽣以更⾼的精度和控制⼒执⾏复杂的⼿术。这些系统能够 提⾼⼿术灵活性，减\",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 4800,\n",
      "                            \"end_char\": 5800,\n",
      "                            \"index\": 6\n",
      "                        },\n",
      "                        \"similarity\": 0.7252661551048445\n",
      "                    }\n",
      "                ],\n",
      "                \"response\": \"根据提供的上下文，Transformer模型在自然语言处理（NLP）中的主要应用包括以下领域（尽管上下文中未直接提及\\\"Transformer\\\"模型，但基于NLP技术的描述可推断其典型应用场景）：\\n\\n1. **机器翻译**  \\n   上下文明确提到NLP技术应用于机器翻译，而Transformer模型（如Google的BERT、OpenAI的GPT等）已成为现代机器翻译的核心架构。\\n\\n2. **文本摘要**  \\n   文中提到NLP技术用于生成文本摘要，Transformer通过自注意力机制能有效处理长文本的语义压缩。\\n\\n3. **情感分析**  \\n   上下文列举NLP在情感分析中的应用，Transformer模型可精准识别文本中的情感倾向。\\n\\n4. **聊天机器人**  \\n   NLP技术被用于客服聊天机器人，Transformer的生成能力（如GPT系列）使其能实现更自然的对话交互。\\n\\n5. **内容生成**  \\n   虽然未直接关联NLP章节，但后文提到AI生成文章、脚本等内容，Transformer模型（如GPT-3）是当前文本生成的主流技术。\\n\\n**局限性说明**：  \\n上下文未明确提及\\\"Transformer\\\"这一术语，因此上述回答是基于NLP应用领域与Transformer模型实际技术地位的合理推断。若需更具体的Transformer架构细节（如自注意力机制），需补充其他资料。\"\n",
      "            },\n",
      "            \"bm25_result\": {\n",
      "                \"query\": \"Transformer模型在自然语言处理中的主要应用有哪些？\",\n",
      "                \"retrieved_documents\": [\n",
      "                    {\n",
      "                        \"text\": \"于解释⼈⼯智 能决策、增强信任和提⾼问责制的⽅法。 ⼈⼯智能和神经科学 ⼈⼯智能与神经科学的交叉研究是⼀个充满希望的研究领域。了解⼈脑可以启发新的⼈⼯智能算法 和架构，⽽⼈⼯智能则可以提供对⼤脑功能和认知的深刻洞察。 ⼈⼯智能安全与保障 确保⼈⼯智能系统的安全是⼀个关键的研究领域。这包括开发验证⼈⼯智能⾏为、降低⻛险和防⽌ 意外后果的⽅法。 以⼈为本的⼈⼯智能 以⼈为本的⼈⼯智能致⼒于开发符合⼈类价值观、提升⼈类能⼒并促进福祉的⼈⼯智能系统。这需 要考虑⼈⼯智能开发和部署的伦理、社会和⼼理层⾯。 第 16 章：⼈⼯智能与艺术 ⽣成式⼈⼯智能与创造⼒ ⽣成对抗⽹络 (GAN) 和 Transformer 等⽣成式 AI 模型能够创作原创内容，包括图像、⽂本和⾳ 乐。这些模型正在突破 AI 驱动创造⼒的界限，并为艺术表达开辟新的可能。 ⼈⼯智能作为合作伙伴 ⼈⼯智能正⽇益成为艺术家和设计师的合作伙伴。⼈⼯智能⼯具可以协助完成构思、原型设计和改 进等任务，从⽽增强创作过程并实现新的表达形式。 ⼈⼯智能在⾳乐和声⾳设计中的应⽤ ⼈⼯智能正在通过赋能新的作曲、表演和制作形式，彻底改变⾳乐和声⾳设计。⼈⼯智能⼯具可以 ⽣成旋律、和声和节奏，创造互动式⾳乐体验，并协助⾳频混⾳和⺟带制作。 视觉艺术与设计中的⼈⼯智能 ⼈⼯智能在视觉艺术和设计领域⽤于⽣成图像、制作动画以及辅助设计流程。⼈⼯智能⼯具可以创 建逼真的图像、⽣成设计变体并⾃动执⾏重复性任务，从⽽让艺术家能够专注于创意探索。 ⼈⼯智能与交互式媒体 ⼈⼯智能正在增强互动媒体，例如视频游戏和虚拟现实体验，使其更加逼真、引⼈⼊胜。⼈⼯智能 驱动的⻆⾊、动态环境和个性化内容，创造了沉浸式、⾃适应的体验。 第 17 章：⼈⼯智能与环境 缓解⽓候变化 ⼈⼯智能通过优化能源消耗、改善可再⽣能源整合以及⽀持碳捕获与储存来缓解⽓候变化。⼈⼯智 能系统可以分析数据、预测⽓候影响并为缓解策略提供信息。 精准农业 ⼈⼯智能通过监测作物、优化资源利⽤和预测产量来增强精准农业。⼈⼯智能⼯具可以改善耕作⽅ 式，减少环境影响，并增强粮⻝安全。 野⽣动物保护 ⼈⼯智能在野⽣动物保护领域发挥着重要作⽤，它可以监测野⽣动物种群数量、追踪其活动轨迹， 并侦测偷猎活动。⼈⼯智能系统可以分析来⾃传感器、摄像头和⽆⼈机的数据，为保护⼯作提供宝 贵的洞⻅。 环境监测 ⼈\",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 7200,\n",
      "                            \"end_char\": 8200,\n",
      "                            \"index\": 9\n",
      "                        },\n",
      "                        \"bm25_score\": 4.33954518316475\n",
      "                    },\n",
      "                    {\n",
      "                        \"text\": \"nlinedoctranslator.com 强化学习 强化学习涉及训练代理在特定环境中做出决策，以最⼤化奖励。代理通过反复试验进⾏学习，并以 奖励或惩罚的形式接收反馈。这种⽅法应⽤于游戏、机器⼈技术和资源管理。 深度学习 深度学习是机器学习的⼀个⼦领域，它使⽤多层⼈⼯神经⽹络（深度神经⽹络）来分析数据。这些 ⽹络的设计灵感来源于⼈脑的结构和功能。深度学习在图像识别、⾃然语⾔处理和语⾳识别等领域 取得了重⼤突破。 卷积神经⽹络（CNN） CNN 是⼀种深度神经⽹络，尤其适⽤于处理图像和视频。它们使⽤卷积层⾃动从输⼊数据中学习 特征。CNN ⼴泛应⽤于物体检测、⾯部识别和医学图像分析。 循环神经⽹络（RNN） RNN 旨在处理序列数据，例如⽂本和时间序列。它们具有反馈连接，可使信息随时间持续存在， 因此⾮常适合语⾔翻译、语⾳识别和情感分析等任务。 ⾃然语⾔处理（NLP） ⾃然语⾔处理 (NLP) 是⼈⼯智能的⼀个分⽀，致⼒于使计算机能够理解、解释和⽣成⼈类语⾔。 NLP 技术⼴泛应⽤于聊天机器⼈、机器翻译、⽂本摘要和情感分析。 计算机视觉 计算机视觉是⼈⼯智能的⼀个领域，它使计算机能够“查看”并解读图像和视频。这涉及物体检 测、图像分割和⾯部识别等任务。计算机视觉⼴泛应⽤于⾃动驾驶汽⻋、医学成像和监控系统。 第三章：⼈⼯智能的应⽤ ⼈⼯智能的应⽤范围⾮常⼴泛，并正在不断扩展到各个⾏业和领域。这些应⽤包括： 卫⽣保健 ⼈⼯智能正在通过医疗诊断、药物研发、个性化医疗和机器⼈⼿术等应⽤改变医疗保健。⼈⼯智能 ⼯具可以分析医学图像、预测患者预后并协助制定治疗计划。 ⾦融 在⾦融领域，⼈⼯智能⽤于欺诈检测、算法交易、⻛险管理和客⼾服务。⼈⼯智能算法可以分析⼤ 型数据集，以识别模式、预测市场趋势并实现财务流程⾃动化。 运输 随着⾃动驾驶汽⻋、交通优化系统和物流管理的发展，⼈⼯智能正在彻底改变交通运输。⾃动驾驶 汽⻋利⽤⼈ ⼯智能感知周围环境、做出驾驶决策并安全⾏驶。 零售 零售⾏业利⽤⼈⼯智能进⾏个性化推荐、库存管理、客服聊天机器⼈和供应链优化。⼈⼯智能系统 可以分析客⼾数据，预测需求、提供个性化优惠并改善购物体验。 制造业 ⼈⼯智能在制造业中⽤于预测性维护、质量控制、流程优化和机器⼈技术。⼈⼯智能系统可以监控 设备、检测异常并⾃动执⾏任务，从⽽提⾼效率并降低成本。 教育 ⼈⼯智\",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 800,\n",
      "                            \"end_char\": 1800,\n",
      "                            \"index\": 1\n",
      "                        },\n",
      "                        \"bm25_score\": 3.895866828508889\n",
      "                    },\n",
      "                    {\n",
      "                        \"text\": \"题也随之⽽来。为⼈⼯智能的开发 和部署建⽴清晰的指导⽅针和道德框架⾄关重要。 ⼈⼯智能武器化 ⼈⼯智能在⾃主武器系统中的潜在应⽤引发了重⼤的伦理和安全担忧。需要开展国际讨论并制定相 关法规，以应对⼈⼯智能武器的相关⻛险。 第五章：⼈⼯智能的未来 ⼈⼯智能的未来很可能以持续进步和在各个领域的⼴泛应⽤为特征。关键趋势和发展领域包括： 可解释⼈⼯智能（XAI） 可解释⼈⼯智能 (XAI) 旨在使⼈⼯智能系统更加透明易懂。XAI 技术正在开发中，旨在深⼊了解⼈ ⼯智能模型的决策⽅式，从⽽增强信任度和责任感。 边缘⼈⼯智能 边缘⼈⼯智能是指在设备上本地处理数据，⽽不是依赖云服务器。这种⽅法可以减少延迟，增强隐 私保护，并在连接受限的环境中⽀持⼈⼯智能应⽤。 量⼦计算和⼈⼯智能 量⼦计算有望显著加速⼈⼯智能算法，从⽽推动药物研发、材料科学和优化等领域的突破。量⼦计 算与⼈⼯智能的交叉研究前景⼴阔。 ⼈机协作 ⼈⼯智能的未来很可能涉及⼈类与⼈⼯智能系统之间更紧密的协作。这包括开发能够增强⼈类能 ⼒、⽀持决策和提⾼⽣产⼒的⼈⼯智能⼯具。 ⼈⼯智能造福社会 ⼈⼯智能正⽇益被⽤于应对社会和环境挑战，例如⽓候变化、贫困和医疗保健差距。“⼈⼯智能造 福社会”倡议旨在利⽤⼈⼯智能产⽣积极影响。 监管与治理 随着⼈⼯智能⽇益普及，监管和治理的需求将⽇益增⻓，以确保负责任的开发和部署。这包括制定 道德准则、解决偏⻅和公平问题，以及保护隐私和安全。国际标准合作⾄关重要。 通过了解⼈⼯智能的核⼼概念、应⽤、伦理影响和未来发展⽅向，我们可以更好地应对这项变⾰性 技术带来的机遇和挑战。持续的研究、负责任的开发和周到的治理，对于充分发挥⼈⼯智能的潜⼒ 并降低其⻛险⾄关重要。 第六章：⼈⼯智能和机器⼈技术 ⼈⼯智能与机器⼈技术的融合 ⼈⼯智能与机器⼈技术的融合，将机器⼈的物理能⼒与⼈⼯智能的认知能⼒完美结合。这种协同效 应使机器⼈能够执⾏复杂的任务，适应不断变化的环境，并与⼈类更⾃然地互动。⼈⼯智能机器⼈ ⼴泛应⽤于制造业、医疗保健、物流和勘探领域。 机器⼈的类型 ⼯业机器⼈ ⼯业机器⼈在制造业中⽤于执⾏焊接、喷漆、装配和物料搬运等任务。⼈⼯智能提升了它们的精 度、效率和适应性，使它们能够在协作环境中与⼈类并肩⼯作（协作机器⼈）。 服务机器⼈ 服务机器⼈协助⼈类完成各种任务，包括清洁、送货、客⼾服务和医疗保\",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 2400,\n",
      "                            \"end_char\": 3400,\n",
      "                            \"index\": 3\n",
      "                        },\n",
      "                        \"bm25_score\": 3.4736737243495557\n",
      "                    },\n",
      "                    {\n",
      "                        \"text\": \"理解⼈⼯智能 第⼀章：⼈⼯智能简介 ⼈⼯智能 (AI) 是指数字计算机或计算机控制的机器⼈执⾏通常与智能⽣物相关的任务的能⼒。该术 语通常⽤于开发具有⼈类特有的智⼒过程的系统，例如推理、发现意义、概括或从过往经验中学习 的能⼒。在过去的⼏⼗年中，计算能⼒和数据可⽤性的进步显著加速了⼈⼯智能的开发和部署。 历史背景 ⼈⼯智能的概念已存在数个世纪，经常出现在神话和⼩说中。然⽽，⼈⼯智能研究的正式领域始于 20世纪中叶。1956年的达特茅斯研讨会被⼴泛认为是⼈⼯智能的发源地。早期的⼈⼯智能研究侧 重于问题解决和符号⽅法。20世纪80年代专家系统兴起，⽽20世纪90年代和21世纪初，机器学习 和神经⽹络取得了进步。深度学习的最新突破彻底改变了这⼀领域。 现代观察 现代⼈⼯智能系统在⽇常⽣活中⽇益普及。从 Siri 和 Alexa 等虚拟助⼿，到流媒体服务和社交媒体 上的推荐算法，⼈⼯智能正在影响我们的⽣活、⼯作和互动⽅式。⾃动驾驶汽⻋、先进的医疗诊断 技术以及复杂的⾦融建模⼯具的发展，彰显了⼈⼯智能应⽤的⼴泛性和持续增⻓。此外，⼈们对其 伦理影响、偏⻅和失业的担忧也⽇益凸显。 第⼆章：⼈⼯智能的核⼼概念 机器学习 机器学习 (ML) 是⼈⼯智能的⼀个分⽀，专注于使系统⽆需明确编程即可从数据中学习。机器学习 算法能够识别模式、做出预测，并随着接触更多数据⽽不断提升其性能。 监督学习 在监督学习中，算法基于标记数据进⾏训练，其中输⼊数据与正确的输出配对。这使得算法能够学 习输⼊和输出之间的关系，并对新的、未知的数据进⾏预测。⽰例包括图像分类和垃圾邮件检测。 ⽆监督学习 ⽆监督学习算法基于未标记数据进⾏训练，算法必须在没有明确指导的情况下发现数据中的模式和 结构。常⽤技术包括聚类（将相似的数据点分组）和降维（在保留重要信息的同时减少变量数 量）。 从英语翻译成中⽂(简体) - www.onlinedoctranslator.com 强化学习 强化学习涉及训练代理在特定环境中做出决策，以最⼤化奖励。代理通过反复试验进⾏学习，并以 奖励或惩罚的形式接收反馈。这种⽅法应⽤于游戏、机器⼈技术和资源管理。 深度学习 深度学习是机器学习的⼀个⼦领域，它使⽤多层⼈⼯神经⽹络（深度神经⽹络）来分析数据。这些 ⽹络的设计灵感来源于⼈脑的结构和功能。深度学习在图像识别、⾃然语⾔处理和语⾳识别等领域 \",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 0,\n",
      "                            \"end_char\": 1000,\n",
      "                            \"index\": 0\n",
      "                        },\n",
      "                        \"bm25_score\": 3.1713663717319633\n",
      "                    },\n",
      "                    {\n",
      "                        \"text\": \"统可以分析数据、预测⽓候影响并为缓解策略提供信息。 精准农业 ⼈⼯智能通过监测作物、优化资源利⽤和预测产量来增强精准农业。⼈⼯智能⼯具可以改善耕作⽅ 式，减少环境影响，并增强粮⻝安全。 野⽣动物保护 ⼈⼯智能在野⽣动物保护领域发挥着重要作⽤，它可以监测野⽣动物种群数量、追踪其活动轨迹， 并侦测偷猎活动。⼈⼯智能系统可以分析来⾃传感器、摄像头和⽆⼈机的数据，为保护⼯作提供宝 贵的洞⻅。 环境监测 ⼈⼯智能环境监测系统可以追踪空⽓和⽔质，检测污染，并⽀持环境保护⼯作。这些系统提供实时 数据，识别污染源，并为环境政策提供信息。 灾难响应 ⼈⼯智能通过分析数据、预测影响和⽀持救援⼯作来增强灾难响应能⼒。⼈⼯智能系统可以提⾼态 势感知能⼒，优化资源配置，并增强救援⼈员之间的协调。 第 18 章：政府和政策在⼈⼯智能中的作⽤ ⼈⼯智能战略与政策框架 世界各国政府正在制定⼈⼯智能战略和政策框架，以指导⼈⼯智能的开发和部署。这些框架旨在解 决伦理问题，促进创新，并确保负责任的⼈⼯智能实践。 ⼈⼯智能监管 ⼈⼯智能监管是⼀个复杂且不断发展的领域。各国政府正在考虑制定法规，以解决偏⻅、透明度、 隐私和安全等问题。平衡创新与伦理考量是⼀项关键挑战。 ⼈⼯智能研发资⾦ 政府在资助⼈⼯智能研发⽅⾯发挥着⾄关重要的作⽤。公共资⾦⽀持基础研究、应⽤研究以及⼈⼯ 智能基础设施的建设。政府投资推动创新，促进合作。 国际合作 国际合作对于应对⼈⼯智能带来的全球挑战和机遇⾄关重要。这包括共享知识、制定标准以及跨境 推⼴负责任的⼈⼯智能实践。 公众参与和教育 让公众参与⼈⼯智能讨论，对于建⽴信任并确保⼈⼯智能发展符合社会价值观⾄关重要。教育和宣 传活动可以让公众了解⼈⼯智能、其影响及其潜⼒。 第 19 章：⼈⼯智能与伦理 道德⼈⼯智能原则 符合伦理道德的⼈⼯智能原则指导着⼈⼯智能系统的开发和部署，以确保其公平、透明、负责且有 益于社会。关键原则包括尊重⼈权、隐私、不歧视和仁慈。 解决⼈⼯智能中的偏⻅ ⼈⼯智能系统可能会继承并放⼤其训练数据中存在的偏⻅，从⽽导致不公平或歧视性的结果。解决 偏⻅需要谨慎的数据收集、算法设计以及持续的监测和评估。 透明度和可解释性 透明度和可解释性对于建⽴对⼈⼯智能系统的信任⾄关重要。可解释⼈⼯智能 (XAI) 技术旨在使⼈ ⼯智能决策更易于理解，使⽤⼾能够评估其公平性和准确性\",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 8000,\n",
      "                            \"end_char\": 9000,\n",
      "                            \"index\": 10\n",
      "                        },\n",
      "                        \"bm25_score\": 2.7935035932101355\n",
      "                    }\n",
      "                ],\n",
      "                \"response\": \"根据提供的上下文，Transformer模型在自然语言处理（NLP）中的主要应用包括以下领域（上下文直接提及或相关技术延伸）：\\n\\n1. **机器翻译**  \\n   - 上下文明确提到NLP技术应用于机器翻译，而Transformer模型（如Google的BERT、OpenAI的GPT等）是当前机器翻译的核心架构，替代了传统的RNN/CNN模型。\\n\\n2. **文本生成**  \\n   - 生成式AI部分提到Transformer能够生成原创文本内容，例如GPT系列模型广泛用于文章写作、对话生成等任务。\\n\\n3. **情感分析**  \\n   - 上下文列举了NLP在情感分析中的应用，Transformer模型通过捕捉上下文语义显著提升了情感分类的准确性。\\n\\n4. **文本摘要**  \\n   - NLP应用部分提到文本摘要任务，Transformer的注意力机制适合提取关键信息生成摘要（如BART、T5等模型）。\\n\\n5. **聊天机器人**  \\n   - 在金融和零售领域的应用中，提到NLP驱动客服聊天机器人，Transformer模型（如DialoGPT）是实现自然对话的主流技术。\\n\\n6. **语音识别与交互**  \\n   - 虽然上下文未直接关联Transformer与语音识别，但NLP部分提到语音识别任务，而Transformer已扩展至语音领域（如Whisper模型）。\\n\\n**局限性说明**：  \\n上下文未明确列出“Transformer”这一术语，但提到的NLP任务（如翻译、文本生成）和生成式AI部分（如“原创文本生成”）均依赖Transformer架构。因此，答案基于上下文任务与Transformer技术实际应用的关联推断得出。\"\n",
      "            },\n",
      "            \"fusion_result\": {\n",
      "                \"query\": \"Transformer模型在自然语言处理中的主要应用有哪些？\",\n",
      "                \"retrieved_documents\": [\n",
      "                    {\n",
      "                        \"text\": \"nlinedoctranslator.com 强化学习 强化学习涉及训练代理在特定环境中做出决策，以最⼤化奖励。代理通过反复试验进⾏学习，并以 奖励或惩罚的形式接收反馈。这种⽅法应⽤于游戏、机器⼈技术和资源管理。 深度学习 深度学习是机器学习的⼀个⼦领域，它使⽤多层⼈⼯神经⽹络（深度神经⽹络）来分析数据。这些 ⽹络的设计灵感来源于⼈脑的结构和功能。深度学习在图像识别、⾃然语⾔处理和语⾳识别等领域 取得了重⼤突破。 卷积神经⽹络（CNN） CNN 是⼀种深度神经⽹络，尤其适⽤于处理图像和视频。它们使⽤卷积层⾃动从输⼊数据中学习 特征。CNN ⼴泛应⽤于物体检测、⾯部识别和医学图像分析。 循环神经⽹络（RNN） RNN 旨在处理序列数据，例如⽂本和时间序列。它们具有反馈连接，可使信息随时间持续存在， 因此⾮常适合语⾔翻译、语⾳识别和情感分析等任务。 ⾃然语⾔处理（NLP） ⾃然语⾔处理 (NLP) 是⼈⼯智能的⼀个分⽀，致⼒于使计算机能够理解、解释和⽣成⼈类语⾔。 NLP 技术⼴泛应⽤于聊天机器⼈、机器翻译、⽂本摘要和情感分析。 计算机视觉 计算机视觉是⼈⼯智能的⼀个领域，它使计算机能够“查看”并解读图像和视频。这涉及物体检 测、图像分割和⾯部识别等任务。计算机视觉⼴泛应⽤于⾃动驾驶汽⻋、医学成像和监控系统。 第三章：⼈⼯智能的应⽤ ⼈⼯智能的应⽤范围⾮常⼴泛，并正在不断扩展到各个⾏业和领域。这些应⽤包括： 卫⽣保健 ⼈⼯智能正在通过医疗诊断、药物研发、个性化医疗和机器⼈⼿术等应⽤改变医疗保健。⼈⼯智能 ⼯具可以分析医学图像、预测患者预后并协助制定治疗计划。 ⾦融 在⾦融领域，⼈⼯智能⽤于欺诈检测、算法交易、⻛险管理和客⼾服务。⼈⼯智能算法可以分析⼤ 型数据集，以识别模式、预测市场趋势并实现财务流程⾃动化。 运输 随着⾃动驾驶汽⻋、交通优化系统和物流管理的发展，⼈⼯智能正在彻底改变交通运输。⾃动驾驶 汽⻋利⽤⼈ ⼯智能感知周围环境、做出驾驶决策并安全⾏驶。 零售 零售⾏业利⽤⼈⼯智能进⾏个性化推荐、库存管理、客服聊天机器⼈和供应链优化。⼈⼯智能系统 可以分析客⼾数据，预测需求、提供个性化优惠并改善购物体验。 制造业 ⼈⼯智能在制造业中⽤于预测性维护、质量控制、流程优化和机器⼈技术。⼈⼯智能系统可以监控 设备、检测异常并⾃动执⾏任务，从⽽提⾼效率并降低成本。 教育 ⼈⼯智\",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 800,\n",
      "                            \"end_char\": 1800,\n",
      "                            \"index\": 1\n",
      "                        },\n",
      "                        \"vector_score\": 0.7682832906287178,\n",
      "                        \"bm25_score\": 3.895866828508889,\n",
      "                        \"index\": 1,\n",
      "                        \"combined_score\": 0.9380890138139706\n",
      "                    },\n",
      "                    {\n",
      "                        \"text\": \"题也随之⽽来。为⼈⼯智能的开发 和部署建⽴清晰的指导⽅针和道德框架⾄关重要。 ⼈⼯智能武器化 ⼈⼯智能在⾃主武器系统中的潜在应⽤引发了重⼤的伦理和安全担忧。需要开展国际讨论并制定相 关法规，以应对⼈⼯智能武器的相关⻛险。 第五章：⼈⼯智能的未来 ⼈⼯智能的未来很可能以持续进步和在各个领域的⼴泛应⽤为特征。关键趋势和发展领域包括： 可解释⼈⼯智能（XAI） 可解释⼈⼯智能 (XAI) 旨在使⼈⼯智能系统更加透明易懂。XAI 技术正在开发中，旨在深⼊了解⼈ ⼯智能模型的决策⽅式，从⽽增强信任度和责任感。 边缘⼈⼯智能 边缘⼈⼯智能是指在设备上本地处理数据，⽽不是依赖云服务器。这种⽅法可以减少延迟，增强隐 私保护，并在连接受限的环境中⽀持⼈⼯智能应⽤。 量⼦计算和⼈⼯智能 量⼦计算有望显著加速⼈⼯智能算法，从⽽推动药物研发、材料科学和优化等领域的突破。量⼦计 算与⼈⼯智能的交叉研究前景⼴阔。 ⼈机协作 ⼈⼯智能的未来很可能涉及⼈类与⼈⼯智能系统之间更紧密的协作。这包括开发能够增强⼈类能 ⼒、⽀持决策和提⾼⽣产⼒的⼈⼯智能⼯具。 ⼈⼯智能造福社会 ⼈⼯智能正⽇益被⽤于应对社会和环境挑战，例如⽓候变化、贫困和医疗保健差距。“⼈⼯智能造 福社会”倡议旨在利⽤⼈⼯智能产⽣积极影响。 监管与治理 随着⼈⼯智能⽇益普及，监管和治理的需求将⽇益增⻓，以确保负责任的开发和部署。这包括制定 道德准则、解决偏⻅和公平问题，以及保护隐私和安全。国际标准合作⾄关重要。 通过了解⼈⼯智能的核⼼概念、应⽤、伦理影响和未来发展⽅向，我们可以更好地应对这项变⾰性 技术带来的机遇和挑战。持续的研究、负责任的开发和周到的治理，对于充分发挥⼈⼯智能的潜⼒ 并降低其⻛险⾄关重要。 第六章：⼈⼯智能和机器⼈技术 ⼈⼯智能与机器⼈技术的融合 ⼈⼯智能与机器⼈技术的融合，将机器⼈的物理能⼒与⼈⼯智能的认知能⼒完美结合。这种协同效 应使机器⼈能够执⾏复杂的任务，适应不断变化的环境，并与⼈类更⾃然地互动。⼈⼯智能机器⼈ ⼴泛应⽤于制造业、医疗保健、物流和勘探领域。 机器⼈的类型 ⼯业机器⼈ ⼯业机器⼈在制造业中⽤于执⾏焊接、喷漆、装配和物料搬运等任务。⼈⼯智能提升了它们的精 度、效率和适应性，使它们能够在协作环境中与⼈类并肩⼯作（协作机器⼈）。 服务机器⼈ 服务机器⼈协助⼈类完成各种任务，包括清洁、送货、客⼾服务和医疗保\",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 2400,\n",
      "                            \"end_char\": 3400,\n",
      "                            \"index\": 3\n",
      "                        },\n",
      "                        \"vector_score\": 0.7384304895131208,\n",
      "                        \"bm25_score\": 3.4736737243495557,\n",
      "                        \"index\": 3,\n",
      "                        \"combined_score\": 0.675076100327078\n",
      "                    },\n",
      "                    {\n",
      "                        \"text\": \"理解⼈⼯智能 第⼀章：⼈⼯智能简介 ⼈⼯智能 (AI) 是指数字计算机或计算机控制的机器⼈执⾏通常与智能⽣物相关的任务的能⼒。该术 语通常⽤于开发具有⼈类特有的智⼒过程的系统，例如推理、发现意义、概括或从过往经验中学习 的能⼒。在过去的⼏⼗年中，计算能⼒和数据可⽤性的进步显著加速了⼈⼯智能的开发和部署。 历史背景 ⼈⼯智能的概念已存在数个世纪，经常出现在神话和⼩说中。然⽽，⼈⼯智能研究的正式领域始于 20世纪中叶。1956年的达特茅斯研讨会被⼴泛认为是⼈⼯智能的发源地。早期的⼈⼯智能研究侧 重于问题解决和符号⽅法。20世纪80年代专家系统兴起，⽽20世纪90年代和21世纪初，机器学习 和神经⽹络取得了进步。深度学习的最新突破彻底改变了这⼀领域。 现代观察 现代⼈⼯智能系统在⽇常⽣活中⽇益普及。从 Siri 和 Alexa 等虚拟助⼿，到流媒体服务和社交媒体 上的推荐算法，⼈⼯智能正在影响我们的⽣活、⼯作和互动⽅式。⾃动驾驶汽⻋、先进的医疗诊断 技术以及复杂的⾦融建模⼯具的发展，彰显了⼈⼯智能应⽤的⼴泛性和持续增⻓。此外，⼈们对其 伦理影响、偏⻅和失业的担忧也⽇益凸显。 第⼆章：⼈⼯智能的核⼼概念 机器学习 机器学习 (ML) 是⼈⼯智能的⼀个分⽀，专注于使系统⽆需明确编程即可从数据中学习。机器学习 算法能够识别模式、做出预测，并随着接触更多数据⽽不断提升其性能。 监督学习 在监督学习中，算法基于标记数据进⾏训练，其中输⼊数据与正确的输出配对。这使得算法能够学 习输⼊和输出之间的关系，并对新的、未知的数据进⾏预测。⽰例包括图像分类和垃圾邮件检测。 ⽆监督学习 ⽆监督学习算法基于未标记数据进⾏训练，算法必须在没有明确指导的情况下发现数据中的模式和 结构。常⽤技术包括聚类（将相似的数据点分组）和降维（在保留重要信息的同时减少变量数 量）。 从英语翻译成中⽂(简体) - www.onlinedoctranslator.com 强化学习 强化学习涉及训练代理在特定环境中做出决策，以最⼤化奖励。代理通过反复试验进⾏学习，并以 奖励或惩罚的形式接收反馈。这种⽅法应⽤于游戏、机器⼈技术和资源管理。 深度学习 深度学习是机器学习的⼀个⼦领域，它使⽤多层⼈⼯神经⽹络（深度神经⽹络）来分析数据。这些 ⽹络的设计灵感来源于⼈脑的结构和功能。深度学习在图像识别、⾃然语⾔处理和语⾳识别等领域 \",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 0,\n",
      "                            \"end_char\": 1000,\n",
      "                            \"index\": 0\n",
      "                        },\n",
      "                        \"vector_score\": 0.7377849918345813,\n",
      "                        \"bm25_score\": 3.1713663717319633,\n",
      "                        \"index\": 0,\n",
      "                        \"combined_score\": 0.6284789150384822\n",
      "                    },\n",
      "                    {\n",
      "                        \"text\": \"于解释⼈⼯智 能决策、增强信任和提⾼问责制的⽅法。 ⼈⼯智能和神经科学 ⼈⼯智能与神经科学的交叉研究是⼀个充满希望的研究领域。了解⼈脑可以启发新的⼈⼯智能算法 和架构，⽽⼈⼯智能则可以提供对⼤脑功能和认知的深刻洞察。 ⼈⼯智能安全与保障 确保⼈⼯智能系统的安全是⼀个关键的研究领域。这包括开发验证⼈⼯智能⾏为、降低⻛险和防⽌ 意外后果的⽅法。 以⼈为本的⼈⼯智能 以⼈为本的⼈⼯智能致⼒于开发符合⼈类价值观、提升⼈类能⼒并促进福祉的⼈⼯智能系统。这需 要考虑⼈⼯智能开发和部署的伦理、社会和⼼理层⾯。 第 16 章：⼈⼯智能与艺术 ⽣成式⼈⼯智能与创造⼒ ⽣成对抗⽹络 (GAN) 和 Transformer 等⽣成式 AI 模型能够创作原创内容，包括图像、⽂本和⾳ 乐。这些模型正在突破 AI 驱动创造⼒的界限，并为艺术表达开辟新的可能。 ⼈⼯智能作为合作伙伴 ⼈⼯智能正⽇益成为艺术家和设计师的合作伙伴。⼈⼯智能⼯具可以协助完成构思、原型设计和改 进等任务，从⽽增强创作过程并实现新的表达形式。 ⼈⼯智能在⾳乐和声⾳设计中的应⽤ ⼈⼯智能正在通过赋能新的作曲、表演和制作形式，彻底改变⾳乐和声⾳设计。⼈⼯智能⼯具可以 ⽣成旋律、和声和节奏，创造互动式⾳乐体验，并协助⾳频混⾳和⺟带制作。 视觉艺术与设计中的⼈⼯智能 ⼈⼯智能在视觉艺术和设计领域⽤于⽣成图像、制作动画以及辅助设计流程。⼈⼯智能⼯具可以创 建逼真的图像、⽣成设计变体并⾃动执⾏重复性任务，从⽽让艺术家能够专注于创意探索。 ⼈⼯智能与交互式媒体 ⼈⼯智能正在增强互动媒体，例如视频游戏和虚拟现实体验，使其更加逼真、引⼈⼊胜。⼈⼯智能 驱动的⻆⾊、动态环境和个性化内容，创造了沉浸式、⾃适应的体验。 第 17 章：⼈⼯智能与环境 缓解⽓候变化 ⼈⼯智能通过优化能源消耗、改善可再⽣能源整合以及⽀持碳捕获与储存来缓解⽓候变化。⼈⼯智 能系统可以分析数据、预测⽓候影响并为缓解策略提供信息。 精准农业 ⼈⼯智能通过监测作物、优化资源利⽤和预测产量来增强精准农业。⼈⼯智能⼯具可以改善耕作⽅ 式，减少环境影响，并增强粮⻝安全。 野⽣动物保护 ⼈⼯智能在野⽣动物保护领域发挥着重要作⽤，它可以监测野⽣动物种群数量、追踪其活动轨迹， 并侦测偷猎活动。⼈⼯智能系统可以分析来⾃传感器、摄像头和⽆⼈机的数据，为保护⼯作提供宝 贵的洞⻅。 环境监测 ⼈\",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 7200,\n",
      "                            \"end_char\": 8200,\n",
      "                            \"index\": 9\n",
      "                        },\n",
      "                        \"vector_score\": 0.7138200264364031,\n",
      "                        \"bm25_score\": 4.33954518316475,\n",
      "                        \"index\": 9,\n",
      "                        \"combined_score\": 0.6276410703324361\n",
      "                    },\n",
      "                    {\n",
      "                        \"text\": \"改变交通运输。⾃动驾驶 汽⻋利⽤⼈ ⼯智能感知周围环境、做出驾驶决策并安全⾏驶。 零售 零售⾏业利⽤⼈⼯智能进⾏个性化推荐、库存管理、客服聊天机器⼈和供应链优化。⼈⼯智能系统 可以分析客⼾数据，预测需求、提供个性化优惠并改善购物体验。 制造业 ⼈⼯智能在制造业中⽤于预测性维护、质量控制、流程优化和机器⼈技术。⼈⼯智能系统可以监控 设备、检测异常并⾃动执⾏任务，从⽽提⾼效率并降低成本。 教育 ⼈⼯智能正在通过个性化学习平台、⾃动评分系统和虚拟导师提升教育⽔平。⼈⼯智能⼯具可以适 应学⽣的个性化需求，提供反馈，并打造定制化的学习体验。 娱乐 娱乐⾏业将⼈⼯智能⽤于内容推荐、游戏开发和虚拟现实体验。⼈⼯智能算法分析⽤⼾偏好，推荐 电影、⾳乐和游戏，从⽽增强⽤⼾参与度。 ⽹络安全 ⼈⼯智能在⽹络安全领域⽤于检测和应对威胁、分析⽹络流量以及识别漏洞。⼈⼯智能系统可以⾃ 动执⾏安全任务，提⾼威胁检测的准确性，并增强整体⽹络安全态势。 第四章：⼈⼯智能的伦理和社会影响 ⼈⼯智能的快速发展和部署引发了重⼤的伦理和社会担忧。这些担忧包括： 偏⻅与公平 ⼈⼯智能系统可能会继承并放⼤其训练数据中存在的偏⻅，从⽽导致不公平或歧视性的结果。确保 ⼈⼯智能系统的公平性并减少偏⻅是⼀项关键挑战。 透明度和可解释性 许多⼈⼯智能系统，尤其是深度学习模型，都是“⿊匣⼦”，很难理解它们是如何做出决策的。增 强透明度和可解释性对于建⽴信任和问责⾄关重要。 隐私和安全 ⼈⼯智能系统通常依赖⼤量数据，这引发了⼈们对隐私和数据安全的担忧。保护敏感信息并确保负 责任的数据处理⾄关重要。 ⼯作岗位流失 ⼈⼯智能的⾃动化能⼒引发了⼈们对⼯作岗位流失的担忧，尤其是在重复性或常规性任务的⾏业。 应对⼈⼯智能驱动的⾃动化带来的潜在经济和社会影响是⼀项关键挑战。 ⾃主与控制 随着⼈⼯智能系统⽇益⾃主，控制、问责以及潜在意外后果的问题也随之⽽来。为⼈⼯智能的开发 和部署建⽴清晰的指导⽅针和道德框架⾄关重要。 ⼈⼯智能武器化 ⼈⼯智能在⾃主武器系统中的潜在应⽤引发了重⼤的伦理和安全担忧。需要开展国际讨论并制定相 关法规，以应对⼈⼯智能武器的相关⻛险。 第五章：⼈⼯智能的未来 ⼈⼯智能的未来很可能以持续进步和在各个领域的⼴泛应⽤为特征。关键趋势和发展领域包括： 可解释⼈⼯智能（XAI） 可解释⼈⼯智能 (XAI) 旨在使⼈⼯智能\",\n",
      "                        \"metadata\": {\n",
      "                            \"start_char\": 1600,\n",
      "                            \"end_char\": 2600,\n",
      "                            \"index\": 2\n",
      "                        },\n",
      "                        \"vector_score\": 0.7343953748840355,\n",
      "                        \"bm25_score\": 2.31591183363671,\n",
      "                        \"index\": 2,\n",
      "                        \"combined_score\": 0.48593430599741927\n",
      "                    }\n",
      "                ],\n",
      "                \"response\": \"根据提供的上下文，Transformer模型在自然语言处理（NLP）中的主要应用包括以下内容：\\n\\n1. **语言翻译**：上下文明确提到NLP技术广泛应用于机器翻译（如第六章提到的\\\"语言翻译\\\"任务），而Transformer模型是当前机器翻译的主流架构。\\n\\n2. **文本生成**：第十六章提到生成式AI模型（如Transformer）能够创作原创文本内容，这包括聊天机器人、文本摘要等应用场景。\\n\\n3. **情感分析**：上下文中多次提及NLP应用于情感分析任务（如RNN部分和NLP概述部分），Transformer模型在此领域具有显著优势。\\n\\n4. **交互式媒体**：第十七章提到Transformer等生成模型被用于增强视频游戏和虚拟现实中的交互体验，包括动态文本生成和对话系统。\\n\\n5. **语音识别**：虽然上下文更多关联RNN与语音识别，但Transformer模型当前也被广泛应用于该领域（在深度学习章节提及的语音识别相关应用）。\\n\\n需要注意的是，上下文未明确列出Transformer模型的所有应用，但通过NLP应用领域和生成式AI部分的描述，可以推断出这些主要应用方向。\"\n",
      "            },\n",
      "            \"comparison\": \"### 比较分析\\n\\n#### 1. 基于向量的检索回答\\n**优点**：\\n- **相关性**：通过语义相似性捕捉到了NLP应用与Transformer模型的潜在关联，即使上下文未明确提及\\\"Transformer\\\"术语。\\n- **全面性**：覆盖了机器翻译、文本摘要、情感分析、聊天机器人和内容生成等主要应用领域。\\n- **清晰度**：明确说明了回答是基于推断，并指出了局限性，增强了可信度。\\n\\n**缺点**：\\n- **事实准确性**：由于上下文未直接提及Transformer，部分推断可能不够精确（如未区分Transformer与其他NLP技术的具体差异）。\\n- **细节缺失**：未提到Transformer特有的技术优势（如自注意力机制），也未涵盖参考答案中的\\\"question answering\\\"等应用。\\n\\n#### 2. BM25关键词检索回答\\n**优点**：\\n- **相关性**：通过关键词匹配（如\\\"机器翻译\\\"、\\\"文本生成\\\"）直接关联上下文与Transformer的实际应用，相关性较强。\\n- **全面性**：不仅覆盖了参考答案的主要应用，还额外提到\\\"语音识别与交互\\\"这一扩展领域。\\n- **事实准确性**：明确引用上下文中的具体章节（如生成式AI部分），增强了答案的准确性。\\n\\n**缺点**：\\n- **冗余信息**：包含与Transformer关联较弱的领域（如语音识别），可能偏离查询核心。\\n- **技术深度不足**：未解释Transformer为何适合这些任务（如长距离依赖处理），仅停留在任务列举层面。\\n\\n#### 3. 融合检索回答\\n**优点**：\\n- **相关性**：结合语义和关键词，既捕捉到NLP应用的广泛关联，又精准定位上下文中的具体章节（如第十六章生成式AI）。\\n- **全面性**：涵盖语言翻译、文本生成、情感分析等核心应用，并补充了\\\"交互式媒体\\\"这一创新场景。\\n- **清晰度**：通过章节引用和任务分类，使回答结构清晰，同时说明推断依据。\\n\\n**缺点**：\\n- **技术细节不足**：与BM25回答类似，未深入解释Transformer的架构优势。\\n- **部分领域牵强**：\\\"交互式媒体\\\"虽相关，但并非Transformer在NLP中的典型应用，可能分散焦点。\\n\\n---\\n\\n### 方法表现排名（从优到劣）\\n1. **融合检索**  \\n   - **最佳原因**：平衡了相关性与全面性，既通过关键词锁定上下文具体内容，又通过语义扩展覆盖合理推断的应用场景（如交互式媒体）。章节引用增强了答案的可信度，且结构清晰。\\n\\n2. **BM25关键词检索**  \\n   - **次优原因**：相关性高但稍显冗余，虽精准匹配关键词，但包含少量边缘信息（如语音识别）。任务列举全面但缺乏技术背景说明。\\n\\n3. **基于向量的检索**  \\n   - **较弱原因**：依赖语义推断导致部分应用（如内容生成）关联性较弱，且未引用上下文具体位置，准确性略逊于其他方法。\\n\\n---\\n\\n### 改进建议\\n- **技术深度**：所有方法均可补充Transformer的核心优势（如自注意力机制），以解释其为何适合所列应用。\\n- **精准过滤**：BM25和融合检索需剔除低关联领域（如语音识别），更聚焦NLP核心任务。\\n- **参考答案对齐**：可增加\\\"question answering\\\"等参考答案提到的应用，提升覆盖度。\"\n",
      "        }\n",
      "    ],\n",
      "    \"overall_analysis\": \"### 全面比较分析：基于向量、BM25和融合检索方法\\n\\n#### 1. 基于向量的检索（语义相似性）\\n**表现最佳的查询类型**：  \\n- 概念性、语义宽泛的查询（如本例的\\\"Transformer模型应用\\\"）  \\n- 需要联想推理的场景（如\\\"与神经网络相关的技术\\\"）  \\n- 存在术语变体/同义词的查询（如\\\"文本生成\\\"vs\\\"内容创作\\\"）\\n\\n**优点**：  \\n• **语义泛化能力**：通过嵌入空间捕捉\\\"应用\\\"的潜在关联，即使文档未显式提及\\\"Transformer\\\"（如返回文本摘要技术的通用论文）  \\n• **领域迁移性**：可识别跨领域关联（如将CV中的ViT论文关联到NLP应用）  \\n• **长尾覆盖**：对低频但语义相关的内容更敏感  \\n\\n**缺点**：  \\n• **术语精确性不足**：可能返回仅语义相关但未实际讨论Transformer的文档  \\n• **可解释性差**：相似度计算过程不透明  \\n• **领域偏差风险**：受训练数据分布影响大  \\n\\n#### 2. BM25关键词检索（关键词匹配）  \\n**表现最佳的查询类型**：  \\n- 术语明确的精确查询（如\\\"BERT模型架构\\\"）  \\n- 需要技术细节的场景（如\\\"Transformer的层归一化实现\\\"）  \\n- 存在标准表述的领域（如学术论文检索）  \\n\\n**优点**：  \\n• **术语精确性**：严格匹配\\\"Transformer\\\"+\\\"应用\\\"等关键词组合  \\n• **可预测性**：遵循布尔逻辑，结果可解释  \\n• **计算效率**：无需向量化处理  \\n\\n**缺点**：  \\n• **词汇鸿沟问题**：无法处理\\\"注意力机制\\\"→\\\"self-attention\\\"等术语变体  \\n• **零结果风险**：对长尾表述（如\\\"基于注意力的NLP模型\\\"）不敏感  \\n• **上下文盲区**：可能返回仅罗列应用名称但无实质分析的文档  \\n\\n#### 3. 融合检索（语义+关键词）  \\n**平衡机制**：  \\n- **加权混合**：如BM25分数×0.6 + 向量分数×0.4  \\n- **级联筛选**：先用BM25做初筛，再用语义排序  \\n- **交叉验证**：仅保留双方都高排名的文档  \\n\\n**优于单方法的情况**：  \\n1. **术语+语义双重要求**的查询（如本例需同时满足\\\"Transformer\\\"和\\\"应用\\\"的语义）  \\n2. **对抗噪声场景**：  \\n   - 过滤BM25返回的术语匹配但内容无关文档（如仅标题含Transformer的广告）  \\n   - 修正向量检索的语义漂移（如将GPT讨论误判为Transformer应用）  \\n3. **长尾需求**：当查询包含专业术语（BM25保障）和抽象概念（向量保障）时  \\n\\n#### 推荐使用场景  \\n| 方法                | 典型场景                                                                 |\\n|---------------------|--------------------------------------------------------------------------|\\n| **纯向量检索**       | 初创企业知识库（术语不规范）、跨领域研究、用户查询表述模糊时            |\\n| **纯BM25**          | 技术文档检索、专利搜索、需要严格术语匹配的法律/医疗场景                 |\\n| **融合检索**        | 学术文献综述、企业级搜索系统、需要平衡召回率与精确度的商业智能场景      |\\n\\n#### 针对本例的优化建议  \\n对于\\\"Transformer应用\\\"类查询，建议：  \\n1. 构建**术语增强向量**：在嵌入阶段将\\\"Transformer\\\"与\\\"BERT/GPT\\\"等别名关联  \\n2. 设计**动态融合权重**：当BM25高分文档＜5时增加语义权重  \\n3. 添加**后过滤层**：使用规则引擎过滤明显无关类型（如纯硬件加速论文）  \\n\\n这种组合策略能在保持90%+相关性的同时，将完全无关结果控制在5%以下（实测比单方法降低40%的bad cases）。\"\n",
      "}\n"
     ]
    }
   ],
   "execution_count": 21
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
